我有一個std::vector<std::string>>. 以下是我的完整程式:
#include <iostream>
#include <vector>
#include <string>
#include <map>
int main() {
std::cout << " -- Beginining of program -- " << std::endl;
std::map<std::string, std::vector<std::string>> my_map_2;
std::vector<std::string> s = {"a", "b", "c"};
my_map_2.insert(std::make_pair("key1", s));
std::vector<std::string> s2 = {"d", "e", "f"};
my_map_2.insert(std::make_pair("key1", s2));
for(auto const &map_item: my_map_2) {
std::cout << map_item.first << " " << map_item.second[0] << std::endl;
std::cout << map_item.first << " " << map_item.second[1] << std::endl;
std::cout << map_item.first << " " << map_item.second[2] << std::endl;
std::cout << map_item.first << " " << map_item.second[3] << std::endl;
std::cout << map_item.first << " " << map_item.second[4] << std::endl;
std::cout << map_item.first << " " << map_item.second[5] << std::endl;
}
std::cout << " -- End of program -- " << std::endl;
return 0;
}
問題:
我沒有看到的物品s2當我列印的值my_map_2。我只有在添加s2新密鑰時才能看到它們!如果我這樣做my_map_2.insert(std::make_pair("key2", s2))而不是my_map_2.insert(std::make_pair("key1", s2)),我確實會看到這些專案。
問題:
所以,我的問題是,如何將更多項附加到key1of指向的向量my_map_2?
uj5u.com熱心網友回復:
以下失敗,因為密鑰已被占用:
std::vector<std::string> s2 = {"d", "e", "f"};
my_map_2.insert(std::make_pair("key1", s2)); // fails
要附加到映射向量,您可以這樣做:
auto& vec = my_map_2["key1"]; // get reference to the existing vector
vec.insert(vec.end(), s2.begin(), s2.end()); // append to it
要查看向量中的鍵和所有值,您可以將回圈更改為:
for(auto const&[key, value]: my_map_2) {
for(const std::string& str : value) {
std::cout << key << ' ' << str << '\n';
}
}
uj5u.com熱心網友回復:
my_map_2["key1"]總是一個有效的向量。可以insert直接進去
#include <iostream>
#include <vector>
#include <string>
#include <map>
int main() {
std::cout << " -- Beginining of program -- " << std::endl;
std::map<std::string, std::vector<std::string>> my_map_2;
std::vector<std::string> s = {"a", "b", "c"};
my_map_2["key1"].insert(my_map_2["key1"].end(), s.begin(), s.end());
std::vector<std::string> s2 = {"d", "e", "f"};
my_map_2["key1"].insert(my_map_2["key1"].end(), s2.begin(), s2.end());
for(auto const &map_item: my_map_2) {
for(auto const &value: map_item.second) {
std::cout << map_item.first << " " << value << std::endl;
}
}
std::cout << " -- End of program -- " << std::endl;
return 0;
}
uj5u.com熱心網友回復:
獲取迭代器 to key1,并將新專案推回現有向量:
std::vector<std::string> s2 = {"d", "e", "f"};
auto it = my_map_2.find("key1");
if (it != my_map_2.end())
std::move(s2.begin(), s2.end(), std::back_inserter(it->second));
else
my_map_2.insert(std::make_pair("key1",std::move(s2)));
要查看:d、e、f,您必須訪問向量的 3,4 和 5 個索引。(您想添加新專案,還是只是覆寫給定鍵的現有專案?)
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/349114.html
上一篇:使用Makefile創建兩個輸出
下一篇:反向波蘭符號功能
