对映射c++中的矢量进行排序
Sort Vector in a Map c++
我试图对映射中的一些向量进行排序,但当我运行程序时,我出现了Segmentation Fault。
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);
我不会在这一部分之后删除/添加项目,也不会将事件添加到地图内的向量中。
对我应该改变什么有什么想法吗?
我怀疑您的程序在插入阶段排序之前会产生分段错误。
map<int, vector<int> >::iterator itTemp;
itTemp = FontaneMapX.find(x); // should be m.find(x)?
if (itTemp == m.end())
itTemp = m.insert(make_pair(x,vector<int>())).first;
itTemp->second.push_back(y);
如果find(x)
函数调用将itTemp
设置为m.end()
,则会发生分段故障。在这种情况下,尝试调用itTemp->second.push_back(y)
会导致segfault。
该部分应为
itTemp = FontaneMapX.find(x);
if (itTemp == m.end())
{
itTemp = m.insert(make_pair(x,vector<int>())).first;
itTemp->second.push_back(y);
}
或者更好,
itTemp = FontaneMapX.find(x);
if (itTemp == m.end())
{
// Insert a vector with one element.
itTemp = m.insert(std::make_pair(x,vector<int>(/*count*/1, y)));
}
或者使用C++11、
itTemp = FontaneMapX.find(x);
if (itTemp == m.end())
{
// Insert a vector with one element.
itTemp = m.insert(std::make_pair(x, std::vector<int>({y}))); // use initializer list
}
我想这个实现效果很好(http://ideone.com/QACBSZ)
#include <iostream>
#include <vector>
#include <algorithm>
#include <map>
using namespace std;
map<int ,vector<int> > mp;
map<int, vector<int> >::iterator it;
int main() {
int n;
cin >> n;
for(int i=0;i<n;i++){
int m;
cin >> m;
vector <int> v(m);
for(int j=0; j < m; j++)
cin >> v[j];
for(int j=0; j < m; j++)
cout << v[j] << " ";
cout << endl;
mp.insert(make_pair(i,v));
}
for(it = mp.begin(); it != mp.end(); it++)
sort(it->second.begin(), it->second.end());
for(it = mp.begin(); it != mp.end(); it++){
int l = it->second.size();
cout << it->first << "th sorted array-> ";
for(int j = 0; j < l; j++)
cout << it->second[j] << " ";
cout << endl;
}
return 0;
}
相关文章:
- 使用 Key 对 C++ 中的哈希映射进行排序. 无法排序
- 如何按值对无序哈希映射进行排序
- 从映射<字符串、矢量中对唯一值进行排序<string>>
- 映射C++按值排序和插入元素
- 使用按插入方式排序的参数创建哈希映射
- 为什么内置排序无法对向量映射进行排序
- 根据类成员对同一密钥的多映射元素进行排序
- 以std::字符串作为关键字,按字典顺序对一个无序映射进行排序
- 使用原子指令确保映射访问安全,是否可以使用两个不同的原子对指令进行重新排序
- 通过多个键和存储映射对大量向量进行排序
- 对键进行排序后,按值对多映射进行排序
- 字节不符合记忆映射和对文件进行排序
- 排序标准::映射<字符串,双精度>
- STL映射排序
- 将C++内存排序映射到Java
- 对一个无序映射c++进行排序时数据丢失
- 如何使用模板创建排序映射整数索引
- 存储内部排序映射元素的最快方式
- 在Rcpp中用(西班牙语)重音单词排序映射
- 是否有一个平面的未排序映射/集实现