C++ C++;,如何穿越无序的地图
总结一下我的问题,在“无序映射”中,我将添加一对,用数字命名,并将其发送到函数。(函数的作用不重要。)然后我将向图形映射中添加另一个东西,但我希望能够遍历到我添加到列表中的下一个东西,因为我想在下一个函数中加入mark的名字 这里有一些代码C++ C++;,如何穿越无序的地图,c++,c++11,unordered-map,C++,C++11,Unordered Map,总结一下我的问题,在“无序映射”中,我将添加一对,用数字命名,并将其发送到函数。(函数的作用不重要。)然后我将向图形映射中添加另一个东西,但我希望能够遍历到我添加到列表中的下一个东西,因为我想在下一个函数中加入mark的名字 这里有一些代码 unordered_map<string,int> graph; unordered_map<string,int>:: iterator it; using namespace std; int main(){ strin
unordered_map<string,int> graph;
unordered_map<string,int>:: iterator it;
using namespace std;
int main(){
string name;
graph.insert(pair<string,int>("Sue",4));
it=graph.begin();
name = it -> first; //name is equal to "Sue"
function(name);
graph.insert(pair<string,int>("Mark",83));
it++ // this will not work
name = it -> first; //this will not end up equaling to "Mark"
function(name);
}
无序映射图;
无序映射::迭代器;
使用名称空间std;
int main(){
字符串名;
图.插入(成对(“Sue”,4));
it=graph.begin();
name=it->first;//name等于“Sue”
职能(名称);
图.插入(成对(“标记”,83));
it++//这不起作用
name=it->first;//这不会等于“Mark”
职能(名称);
}
做++it
不起作用,向后走--it
也不起作用
那么,有没有人能找到一个解决方案,让我如何反向获得name=it->first
to be标记
注意:(我也将多次使用此方法,因为它将进入循环。)对于
无序映射
,不能保证在另一项之后插入的项也将存储在该项之后。这就是无序地图的含义
在这种情况下,您就不走运了:std::hash
合谋让“Sue”出现在“Mark”之后,it++
指向graph.end()
,而it->first
正在解除对它的引用,并出现内存错误
如果使用有序的映射
并在“标记”后插入“Sue”(或者使用std::greater
作为映射
比较“标记”在“Sue”后的原始顺序),那么元素的顺序就是您所期望的
#include <unordered_map>
#include <map>
#include <iostream>
using namespace std;
map<string,int> graph;
map<string,int>:: iterator it;
int main()
{
string name;
graph.insert(pair<string,int>("Mark",4));
it=graph.begin();
name = it -> first; //name is equal to "Sue"
std::cout << name;
graph.insert(pair<string,int>("Sue",83));
it++ ;// this will not work
name = it -> first; //this will not end up equaling to "Mark"
std::cout << name;
}
#包括
#包括
#包括
使用名称空间std;
地图图;
对它进行迭代器;
int main()
{
字符串名;
插入图形(成对(“标记”,4));
it=graph.begin();
name=it->first;//name等于“Sue”
std::cout first;//这不会最终等于“Mark”
std::cout我认为这是因为迭代器值是在调用Begin()
时生成的
在某些其他语言(C#)中,如果IEnumerable
(例如列表
)在IEnumerator
(又称迭代器)处于活动状态时发生更改,则枚举器
无效
下面的IEnumerator::MoveNext()
将抛出一个InvalidOperationException
看
还指出:
如果由于插入而发生重新分级,则所有迭代器都将无效。否则,迭代器将不受影响。引用不会无效。仅当新元素数等于或大于max_load_factor()*bucket_count()时,才会发生重新分级
“下一件事”是什么意思?下一件事的顺序是什么?@TemplateRex我唯一做过的事就是编辑文本。我从未(从未)删除或考虑删除标记。(如果这样的事情发生是不情愿的,或者你弄错了)@simplicisveritatis好吧,编辑历史记录显示你删除了它,但如果是偶然的,没有问题!