这是我的代码
#include <iostream>
#include <map>
#include <string>
#include <vector>
typedef std::vector<int> VectorInt;
typedef std::map<int, VectorInt> MapVectorInt;
int main() {
MapVectorInt myMap;
VectorInt v1;
v1.push_back(1);
v1.push_back(3);
v1.push_back(5);
VectorInt v2;
v2.push_back(2);
v2.push_back(4);
v2.push_back(6);
myMap.insert(std::make_pair(0, v1));
myMap.insert(std::make_pair(1, v2));
return 0;
}
在x位置采取(提取/获取)向量的方法是什么(例如1,2 ......);
答案 0 :(得分:2)
您可以使用:
auto v1=myMap[0]; //This will do a deep copy for the vector
或:
auto& v1=myMap[0]; //This will hold a reference to the vector
在第二种方法中要小心,因为如果项目已删除,则引用将无效。
如果您想要安全选项,请使用std::map::at
:
auto v1=myMap.at(0);
或:
auto& v1=myMap.at(0)
如果项目不存在,这将抛出异常(std::out_of_range
。
答案 1 :(得分:2)
简短回答: 寻找它的最佳位置http://en.cppreference.com/w/cpp/container/map/find
有了上下文:
仅对于可视化,我猜你应该像你在问题中所说的那样表达你的意图(从地图中获取一个元素而不是&#34;最终&#34;将其插入为使用[]来访问一个不存在的元素创造它),所以:
const auto& search = myMap.find(1);
if (search != example.end()) {
for(auto value: search->second) {
std::cout << value << '\n';
}
}
else {
std::cout << "Not found\n";
}
答案 2 :(得分:1)
您可以使用myMap[0]
或myMap[1]
来引用地图中的矢量。
您可以为其中任何一个制作别名,例如: auto& x = myMap[0];
。使用别名将访问存储在地图中的矢量。
要获取矢量的副本(以便您可以修改地图内容而不更改副本),它与复制任何其他对象相同:
auto x = myMap[0];
请注意,0
和1
是指您在insert
电话中使用的密钥;不是搜索顺序或插入顺序(尽管在您的示例中,这些事情都是相同的)。