從std::map 擷取鍵或值到Vector
從std::map 擷取所有鍵或值到向量Vector 是一項目常見任務,但std::map 本身缺乏用於此目的的顯式成員函數。一種方法涉及定義自訂函子,如提供的程式碼所示:
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 keys transform(m.begin(), m.end(), back_inserter(keys), RetrieveKey()); // Dump all keys copy(keys.begin(), keys.end(), ostream_iterator<int>(cout, "\n"));
此解決方案操作地圖外部的數據,這在某些情況下可能並不理想。另一種利用簡單 for 迴圈的方法提供了更清晰、更明確的解決方案:
map<int, int> m; vector<int> key, value; for (auto it = m.begin(); it != m.end(); ++it) { key.push_back(it->first); value.push_back(it->second); cout << "Key: " << it->first << endl; cout << "Value: " << it->second << endl; }
透過以這種方式迭代映射,我們可以將鍵和值直接提取到向量容器中。
另一個選項,如果使用 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"; }
這個版本簡潔、可讀,並且提供對檢索過程的明確控制。選擇最合適的方法取決於開發者的特定需求和偏好。
以上是如何有效地將 std::map 中的鍵和值提取到向量中?的詳細內容。更多資訊請關注PHP中文網其他相關文章!