Чтобы разобрать пару, можно сделать следующее
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);