разбирать пару, то можно сделать следующийДоступ к вложенным парам
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()));
Теперь у меня есть вторая проблема - во время при запуске приложения статус bool user_info может измениться, а позже я хочу переразделить вектор с элементами, которые имеют статус 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 отсутствует) – sellibitze
Справа я понял это позже. Но теперь я еще более смущен, чем раньше. При первом вызове разбить вызов bind возвращает итератор. Как вы говорите, поиск возвращается в итераторе, но его аргумент функции - это значение, а не итератор, так как разыгрывается векторный итератор? Я предполагаю, что я хочу разыменовать итератор, который приведет к паре, а затем я хочу сравнить вторую часть пары с истиной –
Я не знаю, что именно вы хотите. Как насчет случаев, когда find возвращает итератор, который сравнивается с USER_MAP.end()? – sellibitze