将一个向量映射到不同的对,即使向量映射到每对时是不同的?

Mapping one vector to different pairs even though the vector is different by the time it maps to each pair?

本文关键字:映射 向量 是不同 一个      更新时间:2023-10-16

我在将向量映射到整数对时遇到了一些问题。我的问题归结为,如果只有一个向量在 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] << " - " ;