2009-12-15 3 views
4

다음 작업 후 2 개의 요소가 포함될 일부 STL (but not boost) 컨테이너를 찾고 있는데, "abc"및 "xyz":중복 된 요소를 무시하려면 어떤 STL 컨테이너를 사용해야합니까?

std::XContainer<string> string_XContainer; 
string_XContainer.push_back("abc"); 
string_XContainer.push_back("abc"); 
string_XContainer.push_back("xyz"); 

그런데 순서대로 필요합니다. 마지막으로 string_XContainer.size()을 호출하여 총 고유 문자열 수를 얻습니다. 어쩌면 컨테이너가 필요하지 않을 수도 있고, 더 우아한 방법이 있을까요?

답변

18

std::set은 내가 관심있는 사람입니다. 집합은 정의하는 일부 비교 함수에 따라 비교 한 각 요소의 인스턴스를 하나만 포함합니다.

고유 한 문자열의 수를 얻는 한 방법입니다. 귀하의 예제에서, 문자열은 이미 정렬 된 순서로 존재합니까? 그렇다면 배열 (또는 다른 간단한 구조)을 만들고 std::unique 알고리즘을 사용할 수 있습니다.

+0

예,이 컨테이너가 설정됩니다. @Ior Oks,하지만 삽입 된 요소의 순서는 집합에서 유지되지 않습니다, 나는 그것이 필요하지 않습니다. – Naveen

+0

삽입 순서는 유지되지 않지만 엄격한 약한 순서가 유지됩니다. –

+0

고유는 정렬 된 범위에서만 작동한다는 점을 잊지 마십시오. 'std :: adjacent_find (iBegin, iEnd, std :: greater ()) == iEnd' 트릭을 사용하여 범위가 정렬되어 있는지 테스트하고 'sort'가 아닌 경우에만 적용 할 수 있습니다. –

관련 문제