亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何從std :: map檢索所有鍵(或值)并將其放入向量中?

如何從std :: map檢索所有鍵(或值)并將其放入向量中?

C++
小怪獸愛吃肉 2019-11-22 16:06:18
這是我出現的可能方法之一:struct RetrieveKey{    template <typename T>    typename T::first_type operator()(T keyValuePair) const    {        return keyValuePair.first;    }};map<int, int> m;vector<int> keys;// Retrieve all keystransform(m.begin(), m.end(), back_inserter(keys), RetrieveKey());// Dump all keyscopy(keys.begin(), keys.end(), ostream_iterator<int>(cout, "\n"));當然,我們還可以通過定義另一個函子RetrieveValues從映射中檢索所有值。還有其他方法可以輕松實現這一目標嗎?(我一直想知道為什么std :: map不包含成員函數供我們這樣做。)
查看完整描述

3 回答

?
滄海一幻覺

TA貢獻1824條經驗 獲得超5個贊

雖然您的解決方案應該可以工作,但根據其他程序員的技能水平,可能很難閱讀。此外,它將功能從呼叫站點移開。這會使維護更加困難。


我不確定您的目標是將密鑰轉換為向量還是將其打印為cout,所以我會同時進行。您可以嘗試如下操作:


map<int, int> m;

vector<int> v;

for(map<int,int>::iterator it = m.begin(); it != m.end(); ++it) {

  v.push_back(it->first);

  cout << it->first << "\n";

}

甚至更簡單,如果您使用的是Boost:


map<int,int> m;

pair<int,int> me; // what a map<int, int> is made of

vector<int> v;

BOOST_FOREACH(me, m) {

  v.push_back(me.first);

  cout << me.first << "\n";

}

就個人而言,我喜歡BOOST_FOREACH版本,因為鍵入的次數更少,并且它在做什么方面非常明確。


查看完整回答
反對 回復 2019-11-22
?
慕無忌1623718

TA貢獻1744條經驗 獲得超4個贊

//c++0x too

std::map<int,int> mapints;

std::vector<int> vints;

vints.reserve(mapints.size());

for(auto const& imap: mapints)

    vints.push_back(imap.first);


查看完整回答
反對 回復 2019-11-22
?
ibeautiful

TA貢獻1993條經驗 獲得超6個贊

為此有一個升壓范圍適配器:


vector<int> keys;

// Retrieve all keys

boost::copy(m | boost::adaptors::map_keys, std::back_inserter(keys));

有一個類似的map_values范圍適配器可用于提取值。


查看完整回答
反對 回復 2019-11-22
  • 3 回答
  • 0 關注
  • 1224 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號