首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将一个向量映射到不同的对,即使向量映射到每个对的时间不同?

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

Stack Overflow用户
提问于 2018-08-08 00:23:32
回答 2查看 43关注 0票数 1

我在将向量映射到整数对时遇到了一些问题。我的问题归结为,如果一个只有一个向量在for循环开始时被清除,填充然后赋值给一个对,我是否会遇到错误,因为我将相同的向量分配给不同的整数对,即使每次赋值时向量都不同?

从本质上讲,如果我有:

代码语言:javascript
运行
复制
map[Pair1]=Vector1;
Vector1.push_back(1);
Map[Pair2]=Vector1;

是否会为Pair1和Pair2分配相同的值向量?

EN

回答 2

Stack Overflow用户

发布于 2018-08-08 00:25:50

这取决于地图本身。

如果它是std::vector值或对象的地图(就像在std::map<std::pair<int, int>, std::vector<int>>中一样),那么地图中的每个向量都将是不同的和唯一的。每个关键点都有自己的向量对象。

在您的示例中,map[Pair1]将是一个与map[Pair2]不同的向量。对Vector1的任何修改都不会自动传播到map[Pair1]

票数 3
EN

Stack Overflow用户

发布于 2018-08-08 01:32:52

是否会为Pair1和Pair2分配相同的值向量?

不是的。

首先,请记住,STL容器的值类型必须是可赋值的,这样您就不能在映射中使用引用作为值,因为它们是不可赋值的。另一方面,你可以使用指针,但是如果你像你提到的那样实现代码,这将导致映射中所有键的值都是相同的。

所以,只要你使用可赋值类型(如下所示),你就会做得很好。

代码语言:javascript
运行
复制
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] << " - " ;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51731395

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档