我在将向量映射到整数对时遇到了一些问题。我的问题归结为,如果只有一个向量在 for 循环开始时清除,填充然后分配给一对,我会遇到错误,因为我将相同的向量分配给不同的整数对,即使向量每次分配值时都不同?
基本上,如果我有:
map[Pair1]=Vector1;
Vector1.push_back(1);
Map[Pair2]=Vector1;
是否会为配对 1 和配对 2 分配相同的值向量?
这取决于地图本身。
如果它是std::vector
值或对象的映射(如std::map<std::pair<int, int>, std::vector<int>>
(,则映射中的每个向量将是独特且唯一的。每个键都有自己的矢量对象。
在您的示例中,map[Pair1]
将是与 map[Pair2]
不同的向量。对Vector1
的任何修改都不会自动传播到map[Pair1]
。
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] << " - " ;