我在将向量映射到整数对时遇到了一些问题。我的问题归结为,如果一个只有一个向量在for循环开始时被清除,填充然后赋值给一个对,我是否会遇到错误,因为我将相同的向量分配给不同的整数对,即使每次赋值时向量都不同?
从本质上讲,如果我有:
map[Pair1]=Vector1;
Vector1.push_back(1);
Map[Pair2]=Vector1;是否会为Pair1和Pair2分配相同的值向量?
发布于 2018-08-08 00:25:50
这取决于地图本身。
如果它是std::vector值或对象的地图(就像在std::map<std::pair<int, int>, std::vector<int>>中一样),那么地图中的每个向量都将是不同的和唯一的。每个关键点都有自己的向量对象。
在您的示例中,map[Pair1]将是一个与map[Pair2]不同的向量。对Vector1的任何修改都不会自动传播到map[Pair1]。
发布于 2018-08-08 01:32:52
是否会为Pair1和Pair2分配相同的值向量?
不是的。
首先,请记住,STL容器的值类型必须是可赋值的,这样您就不能在映射中使用引用作为值,因为它们是不可赋值的。另一方面,你可以使用指针,但是如果你像你提到的那样实现代码,这将导致映射中所有键的值都是相同的。
所以,只要你使用可赋值类型(如下所示),你就会做得很好。
std::map<pair<int,int> , vector<int> > myMap;
vector<int> vec;
vec.push_back(1);
vec.push_back(2);
vec.push_back(3);
myMap[std::make_pair(1,1)] = vec;
for(int i=0; i< myMap[make_pair(1,1)].size(); ++i)
    cout << myMap[make_pair(1,1)][i] << " - " ;
cout << endl;
vec.clear();
vec.push_back(4);
vec.push_back(5);
myMap[make_pair(2,1)] = vec;
for(int i=0; i< myMap[make_pair(2,1)].size(); ++i)
    cout << myMap[make_pair(2,1)][i] << " - " ;https://stackoverflow.com/questions/51731395
复制相似问题