【发布时间】:2013-08-27 18:09:00
【问题描述】:
我正在尝试对地图中的一些向量进行排序,但是当我运行程序时出现分段错误。
typedef map<int, vector<int> > Map;
Map m;
for (Map::iterator it = m.begin(); it != m.end(); ++it) {
sort(it->second.begin(), it->second.end());
}
就在排序之前,我有一个插入数据的部分:
int x = 2;
int y = 3;
map<int, vector<int> >::iterator itTemp;
itTemp = FontaneMapX.find(x);
if (itTemp == m.end())
itTemp = m.insert(make_pair(x,vector<int>())).first;
itTemp->second.push_back(y);
在本节之后我不会删除/添加项目,而不是地图内的矢量事件。
对我应该改变什么有什么想法吗?
【问题讨论】:
-
我在这里运行了你的代码ideone.com/wBKuDP,它没有段错误。这不是决定性的,它可能只是偶然的。但我看不出代码有什么问题,所以可能是其他原因导致了错误。
-
顺便说一句,你也可以这样做,这可能更清楚:
vector<int>& vec = m[x]; if (vec.empty()) vec.push_back(y);如果它不存在,它会使用默认构造函数创建值。 -
@Neil 不需要
if (vec.empty())测试,它也不会出现在 OP 的代码中。只需执行m[x].push_back(y);- 一行而不是四行。 ;-) -
检查地图/矢量是否同时被另一个线程访问?检查您是否有自己的
sort函数被调用而不是std::sort? -
介意显示更多代码吗?我认为您发布的内容没有任何问题。
标签: c++ algorithm sorting vector map