2016-12-05 9 views
0

Ich habe einen Code auf C++, den ich auf PHP neu schreiben muss. Seltsames passiert mir, da ich PHP-Programmierer bin und C++ nicht gut kenne. Dies ist der Code:C++ unordered_set einfügen einfügen PHP

#include <iostream> 
#include <unordered_set> 
using namespace std; 

int func(int choice) { 

    unordered_set<int> hset; 
    for (int counter = 0; counter < choice; counter++) { 
     hset.insert(counter); 
     if (counter % 2 == 0) { 
      hset.insert(counter); 
      hset.insert(counter + 1); 
     } 
    } 
    return hset.size(); 
} 

int main(int argc, char** argv) { 
    cout << func(561); 
    return 0; 
} 

Ausgabe des Codes ist: 562;

Ich habe PHP-Code wie folgt geschrieben:

function func($choice) { 

$hset = []; 

for ($counter = 0; $counter < $choice; $counter++) { 
    array_push($hset, $counter); 
    if ($counter % 2 == 0) { 
     array_push($hset, $counter); 
     array_push($hset, $counter + 1); 
    } 
} 

    return count($hset); 
} 

echo func(561); 

Es gibt 1123. Bitte helfen Sie.

+0

verwenden Warum Sie 'unordered_set' verwenden? Weißt du, was sein Zweck ist? Der Grund, warum ich frage, ist, weil Sie eine Menge von doppelten Elementen in die Menge einfügen, und "ungeordnete_menge" behält nur eine Kopie jedes einzelnen Elements. –

+0

@BenjaminLindley Das ist das Problem: Das OP kennt (zugegeben) C++ nicht gut. Sie haben jedoch einen Punkt: dieser bestimmte Teil des ursprünglichen Codes macht keinen Sinn. –

+0

@MrLister: Ja, ich bin nur neugierig, was ihn denken ließ "ungeordnete_set" war der richtige Container der Job hier (was auch immer dieser Job ist). Es ist in der Regel nicht einer der ersten Container lernen Sie beim Lernen von C++ und einer Die ersten Container, über die die meisten Leute Bescheid wissen ("std :: vector"), sind afaikt, der richtige Container für den Job. –

Antwort

2

C++ unordered_set wird keine doppelten Elemente zulassen. Da Sie counter und counter+1 in drücken, versuchen Sie im Allgemeinen, das gleiche Element zweimal zu drücken, und eines dieser Male wird es zurückgewiesen. Wenn Sie ein ähnliches Verhalten wie PHP haben möchten, verwenden Sie stattdessen std::vector, mit emplace_back (oder push_back), um Ihre Elemente hinzuzufügen.

Wenn Sie in die andere Richtung gehen wollen, dann in PHP können Sie array_unique

+0

Vielen Dank! Ich habe array_unique benutzt und geholfen – Buglinjo