gpt4 book ai didi

c++ - 在 Map c++​​ 中对 vector 进行排序

转载 作者:太空狗 更新时间:2023-10-29 23:17:23 24 4
gpt4 key购买 nike

我正在尝试对我的 map 中的一些 vector 进行排序,但是当我运行该程序时出现段错误。

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 内的 vector 进行事件处理。

关于我应该改变什么的任何想法?

最佳答案

我怀疑您的程序在排序之前在插入阶段产生了段错误。

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) 会导致段错误。

那个部分应该是

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
}

关于c++ - 在 Map c++​​ 中对 vector 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18424026/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com