vector
을 pair.first
인 std::string
과 비교하면 어떻게 분류 할 수 있습니까? (정적 비교 기능을 제공하지 않고 부스트를 사용하지 않음).std :: vector <std :: pair <std :: string, bool >>을 문자열로 정렬 하시겠습니까?
답변
std::vector<std::pair<std::string, bool> > v;
std::sort(v.begin(), v.end());
std::pair
과부하 operator<
는 second
요소가 그 요소에 의해 제 first
정렬한다. 따라서 기본 정렬 순서 (operator<
)를 사용하여 vector
을 정렬하면 원하는 순서대로 정렬됩니다.
맞춤형 비교기를 사용하여 '.first
'쌍만 주문할 수 있습니다.
sort(begin, end,
compose2(less<string>(),
select1st<pair<string, bool> >(),
select1st<pair<string, bool> >()));
'select1st'는 C++ 표준 라이브러리의 일부가 아닙니다. –
음. 다행스럽게도 다음과 같이 쓰는 것이 쉽습니다 :'template
정말 제임스의 대답과 같은 I, 그러나 당신이 고려하는 것이 좋습니다 다른 하나의 옵션이있다 - 단지 std::map
에 모든 것을 깔때기 : 중복 문자열이있는 경우,
std::map<std::string, bool> myMap(v.begin(), v.end());
또는이하는 std::multimap
:
std::multimap<std::string, bool> myMultiMap(v.begin(), v.end());
이것은을 위해 (N) O는 달리, 당신은 다음 추가하거나 새로운 키/값 쌍을 제거해야하는 경우, 당신은 O (LG 전자 N)에 그렇게 할 수있는 추가 이점을 가지고있다 정렬 된 벡터입니다.
정말로 벡터를 사용해야하는 경우 James의 대답을 참조하십시오. 그러나 쌍의 벡터가있는 경우 실제로는 std::map
이 필요합니다.
- 1. std :: vector <std :: pair <int, std :: pair <Bone, std :: string>> int로 정렬하지 않습니까?
- 2. std :: vector <std::string> 충돌
- 3. std :: sort on std :: vector <std::string>
- 4. itdate std :: vector <std :: vector <char>>?
- 5. std :: map <X, std :: vector <Y>> 반복 및 벡터 정렬
- 6. const std :: map <boost :: tuples :: tuple, std :: string>?
- 7. 타입 'std :: vector <Object*> &'
- 8. std :: function <> 비교하기
- 9. 초기화 목록 std :: pair
- 10. std :: map <tstring <std :: map <tstring, unsigned int >> 할당 실패
- 11. std :: vector <char>에서 wchar_t로 변환 *
- 12. 'std :: vector <T> :: iterator it;' 나는이 기능을 가지고
- 13. std :: vector <boost :: function> with boost :: bind
- 14. 어떻게 const std :: vector <Object * const>를 반환할까요?
- 15. std :: vector <float> 및 이중 * - 얼마나 안전한가요?
- 16. std :: vector 및 std :: string을 사용하여 포인터 및 참조와 관련된 특정 문제가 있습니다. std :: vector, std :: string
- 17. std :: list <> :: sort sort가 안정적입니까?
- 18. std :: set 유지하기 <boost :: shared_ptr>
- 19. std :: atomic에 ++ 원자입니다. <int>
- 20. std :: list <boost :: variant>
- 21. 목록에서 std :: sort() 사용 <int>
- 22. std :: list <> : l.begin() 전에 요소
- 23. lexical_cast의 다른 약어 <T> (std :: string)
- 24. std :: vector, std :: map 및 메모리 문제
- 25. std :: multimap과 std :: vector 사이에 교차가 있습니까?
- 26. std :: vector 중간에 추가하기
- 27. std :: list를 얻는 방법 <std::string> :: 오류 값을 출력하는 iterator?
- 28. std :: vector abort problem
- 29. C++ std :: vector 요소를 사용하여 std :: vector 요소를 재정렬하십시오.
- 30. std :: vector 문제
이것은 C++ 0x 전용 답변입니다. ;) 편집 : 두 개의 중첩 된 템플릿'<>'쌍을 닫는 토큰 ('''토큰은 C++ 0x 전용입니다.)이 수정되었습니다. –
@Charles : 하! 네, 아마도 많은 답변에서 그렇게하겠습니다. 나는'>>'을 지원하는 컴파일러를 사용하는 데 익숙하다. –
+1 :'std :: pair :: operator <()'에 과부하가 걸렸다는 것을 몰랐습니다. 지금 할게! –