拆開一對,下面可以做訪問嵌套對
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可以改變,後來我想重新分區與狀態布爾值爲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返回一個不是一對的迭代器。 (引用缺失) – sellibitze 2009-09-22 13:53:35
你的權利,我後來意識到這一點。但現在我比以前更困惑了。在我第一次調用分區時,綁定調用正在返回一個迭代器。正如你所說的在迭代器中查找返回值,但其函數參數是一個值,而不是迭代器,那麼向量迭代器如何解除引用? 我想我想要的是取消引用會導致一對的迭代器,然後我想比較真正的 – 2009-09-22 14:46:57
對的第二部分。我不知道你想要什麼。如果find返回一個比較等於USER_MAP.end()的迭代器呢? – sellibitze 2009-09-22 15:00:52