将一个向量映射到不同的对,即使向量映射到每对时是不同的?
Mapping one vector to different pairs even though the vector is different by the time it maps to each pair?
我在将向量映射到整数对时遇到了一些问题。我的问题归结为,如果只有一个向量在 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] << " - " ;
相关文章:
- 如何在 c++ 中创建结构向量的映射
- 在C++中初始化向量映射的最有效方法
- C++ STD 函数运算符:有没有一种方法可以通过函数将一个向量映射到另一个向量上?
- 字符串共享内存映射的向量
- 具有 2 个分量的数组的特征映射到 3 的向量
- 当键值是 std 向量时,为什么使用 at in C++ 访问映射值如此缓慢?
- 当映射包含字符串向量作为值时,从值中获取键的有效方法
- 如何初始化 std::向量的映射?
- 访问映射中的分区向量
- 如何将整数向量插入到键中,标准::映射的值
- 将一个向量映射到不同的对,即使向量映射到每对时是不同的?
- 如何从向量映射中迭代向量
- 访问映射向量的映射元素(c++)
- 映射向量的时间复杂性是多少
- C++:通过从映射向量分配映射实例来填充映射的映射
- 在一个映射向量上迭代,如果满足条件,则插入一个副本
- 如何在映射向量中循环访问地图
- 丢弃限定符 访问类中的映射向量时出错
- 从常量迭代器到映射向量,获取映射向量中映射元素的键和值
- 映射向量c++