떨어져 쌍을하려면 중첩 된 쌍을 액세스, 다음과 같은 서로 다른 컨테이너의 조합을 사용하는 방법에 대한 가
boost::bind(&std::pair::second, _1); // returns the value of a pair
무엇
을 수행 할 수 있습니다, 어떻게 중첩 된 쌍에 액세스 할 수 있습니까? 나는 보충지도에 포함되지 않은 것을 보충지도에 포함 된 항목 및 항목에 벡터를 분할하고 싶었 예를 들어나는 다음과 같은 사용 : 이제
typedef int DWORD; typedef std::pair<std::string, bool> user_info;
typedef std::map<DWORD, user_info> USER_MAP;
typedef std::vector<DWORD> VEC_STAFF;
VEC_STAFF::iterator it = std::partition(
Staff.begin(), Staff.end(),
(bind(&USER_MAP::find, m_Users, _1) != m_Users.end()));
내가 두 번째 문제가 - 중 user_info의 상태 bool이 변경 될 수있는 응용 프로그램의 실행과 나중에 보충 맵에 포함되지 않고 상태 bool이 true 인 항목으로 벡터를 다시 분할하려고합니다.
그러나 중첩 된 쌍의 두 번째 항목에 액세스하는 데 문제가있는 것 같습니다.
다음을 시도했지만 중첩 된 쌍에 액세스 할 수 없습니다!
VEC_STAFF::const_iterator itCurEnd = partition(Staff.begin(), Staff.end(),
bind(&USER_MAP::value_type::second::second,
bind(&USER_MAP::find, &m_Users, _1)) == true);
의 여러 수준의 장난에 비해 읽기 훨씬 쉽게, 그것은 조건으로 자신의 클래스를 작성하는 아마 좋습니다. 당신의 코드에서 당신이 무엇을하려했는지 확실하지 않습니다. find는 쌍이 아닌 반복자를 반환합니다. (Dereferencing is missing) – sellibitze
당신의 권리, 나는 이것을 나중에 깨달았습니다. 하지만 지금은 전보다 훨씬 더 혼란 스럽습니다. partition에 대한 첫 번째 호출에서 바인드 호출은 반복자를 반환합니다. find 반복자에서 리턴 값을 말하지만 함수 인자는 반복자가 아닌 값이며 그래서 벡터 반복자는 어떻게 참조 해제됩니까? 내가 원하는 것은 반복자를 역 참조하는 것이고 그 다음에 쌍을 생성하는 반복자를 참조한 다음 쌍의 두 번째 부분을 참과 비교하려고합니다. –
내가 원하는 것이 무엇인지 알 수 없습니다. find가 USER_MAP.end()와 동일한 이터레이터를 반환하는 경우는 어떻습니까? – sellibitze