2016-12-05 4 views
0

PHP에서 다시 작성해야하는 C++의 코드가 있습니다. PHP 프로그래머이고 C++을 잘 모르는 동안 이상한 일이 일어납니다. 코드의C++ unordered_set insert insert 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; 
} 

출력은 다음과 같습니다 : 이 코드입니다 562;

는이 같은 PHP 코드를 작성했습니다 :

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); 

1123를 반환합니다. 도와주세요.

+0

를 사용할 수 있을까? 그 목적이 무엇인지 아십니까? 내가 물어 보는 이유는 집합에 중복 된 요소들을 넣기 때문이며'unordered_set'는 각 고유 한 요소의 복사본을 1 개만 유지하기 때문입니다. –

+0

@BenjaminLindley 이것이 문제입니다. OP (Cognise)는 C++을 잘 모릅니다. 그러나 원래 코드의 특정 부분은 의미가 없습니다. –

+0

@MrLister : 네, 궁금한 점은 'unordered_set'이 여기에 일자리를 얻는 데 적합한 컨테이너라고 생각하게 만드는 것입니다. 일반적으로 C++를 배울 때 처음 배울 컨테이너 중 하나가 아니며 대부분의 사람들이 배울 수있는 첫 번째 컨테이너 ('std :: vector')는 afaict이며, 작업에 적합한 컨테이너입니다. –

답변

2

C++의 unordered_set은 중복 요소를 허용하지 않습니다. countercounter+1을 입력 했으므로 일반적으로 동일한 요소를 두 번 푸시하려고 시도하며 그 중 하나는 거부됩니다.

PHP와 비슷한 동작을 원할 경우 emplace_back (또는 push_back)과 함께 std::vector을 사용하여 요소를 추가하십시오.

당신이 다른 방법을 가고 싶은 경우`unordered_set`을 사용하는 이유는 다음 PHP 당신이 array_unique

+0

고마워요! 나는 array_unique를 사용하고 도움을 주었다. – Buglinjo