gpt4 book ai didi

c++ - 如何在 C++ 中维护映射指针 vector

转载 作者:行者123 更新时间:2023-11-28 08:17:41 25 4
gpt4 key购买 nike

我确实在 StackOverFlow 中搜索过类似的帖子,并且知道这很难做到。这是我面临的问题。我写了一个函数,它接受 map vector (vector<map<char, char> >)并更新它们。当它更新内容时,我需要将其发送为 vector<map<char, char>* >*假设我想搜索这个数据结构,看看是否有我要找的字符映射。我这样做了

vector<map<char, char>* >::iterator it = my_ds->begin();

for (; it != my_ds->end(); ++it) {

map<char, char>::iterator map_it = (*it).find(given_char);
if (map_it != (*it).end()) {
// Found
}
}

// Update the map. With some condition either I update existing map or create a newmap.

if (update_existing_map) {

map<char, char>* my_map = my_ds[update_index];
my_map->insert(pair<char, char>(given_char, required_char));
}

else {

map<char, char> my_map;
my_map.insert(pair<char, char> (given_char, required_char));
my_ds.push_back(&my_map); // This might be a problem
}
}

现在这个程序挂了一段时间,网上查了一下,人家说是因为vector翻倍的时候,里面有很多无效指针,可能会在追逐这些无效指针的过程中进入死循环。

我应该怎么做才能让它发挥作用?

最佳答案

map<char, char> my_map;
my_map.insert(pair<char, char> (given_char, required_char));
my_ds.push_back(&my_map); // This might be a problem

你是对的 - 这是个问题。您正在推送局部变量的地址。你可以改为:

map<char, char> *my_map = new map<char, char>;
my_map->insert(pair<char, char> (given_char, required_char));
my_ds.push_back(my_map);

调整 vector 的大小不会创建无效指针 - vector 会保持您正确存储的指针。如果您保留 vector 中任何项目的地址(而不是您存储的指针),它们可能会改变,并且添加到 vector 将使您拥有的任何迭代器失效。

关于c++ - 如何在 C++ 中维护映射指针 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7142888/

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