【发布时间】:2020-12-03 11:56:00
【问题描述】:
我目前正试图从一个 groups 的 unordered_map 返回键值 only,它有一个 string 作为 key 和 字符串向量 作为我的 值。我目前遇到的问题是我的 unordered_map groups 的 it 迭代器指向 end() 并使我的陈述为假,永远不会返回我的 groupKey。我只能使用 hasNext 和 getNextHome 来遍历我的地图。所以 for 循环不能用于这个任务。 我已经在我的头文件中初始化了它们:
Home::Home()
{
iter = 0;
it = groups.begin();
}
private:
int iter; // the iterator
unordered_map<string, vector<string>>::iterator it; // iterator for the map
void Home::resetHomeIterator()
{
iter = 0;
it = groups.begin();
}
bool Home::hasNext() {
if (iter == groups.size() && it == groups.end()) {
return false;
}
else if (iter < groups.size()) {
return true;
}
return false;
}
string Home::getNextHome()
{
if (hasNext() == false || it == groups.end()) {
resetHomeIterator();
}
it++;
string groupKey = it->first;
return groupKey;
}
每当我运行它时,it->first 都会给我一个错误,我无法“取消引用结束列表迭代器”,并且当我调试时,我从来没有得到 groupKey返回,它只是变为 false,所以我永远不会得到返回的密钥。
我正在尝试取回 groupKey 并在我的 main.cpp 文件( while (hasNext) )中为我的 hasNext 使用 while 循环,并以这种方式迭代键值。我知道我的 group 映射也不为空,我在使用调试器时看到它们被相应地放置。我试图解决它,但我不确定我是否得到它。我可能会遗漏一些东西。因为它是一个字符串,我怎样才能只检索密钥?
【问题讨论】:
-
迭代器用于迭代和瞬态使用。当底层集合被修改时,它们通常会失效,从而导致以后出现未定义的行为。 (从您显示的界面部分来看,看起来成对的向量比地图更适合您。)
-
这很令人困惑
int iter; // the iterator看起来您使用iter作为大小。它不是一个迭代器 -
@molbdnilo,在这种情况下,除了 map 之外我不能使用其他任何东西):所以我不能使用 unordered_map 迭代器来访问密钥对吗?
标签: c++ visual-studio stl