gpt4 book ai didi

c++ - 通过值查找 map 中的元素

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:09:22 24 4
gpt4 key购买 nike

我正在创建一个 HandleManager其目的是简单地映射 Handle s (这是 typedeflong long int )到 string秒。目的是让使用 Handle 的对象也可以通过 string 识别如果它可以帮助用户记住该对象。在这种情况下,在这张 map 中:

typedef std::unordered_map<Handle, std::string> HandleMap;

这对中的两种类型都是键,因为它们可以用来识别任何东西。到目前为止,除了需要获取 Handle 的代码外,所有内容都已编译。 .目的是当用户分配一个 string像这样:

handle("myHandle"); 

A Handle随机生成然后string passed 在上述 map 中与它配对。我现在想要的是能够得到 Handlestring 配对基于 string即通过:

Handle HandleManager::id(const std::string &name)
{
HandleMap::iterator it = pHandles.find(name);

if (it != pHandles.end())
return it->first;
return -1;
}

但出于某些奇怪的原因,编译器会提示:

HandleManager.cpp:48:45: error: no matching function for call to ‘std::unordered_map<long long int, std::basic_string<char> >::find(const string&)’

在上述 map 中,string是值和 Handle是关键。那么如何从 unordered_map 中获取 key基于其中包含的

最佳答案

可以使用成员函数find仅搜索键。要搜索值,您可以使用 std::find_if使用 lambda 函数(如果您使用 C++11),或遍历映射(在以前的 C++ 版本中可以):

for (HandleMap::const_iterator it = map.begin(); it != map.end(); ++it) {
if (it->second == name) return it->first;
}
// or value not found

另一方面,如果搜索一个值是一个非常常见的操作,您可能需要两个映射:std::unordered_map<Handle, std::string>std::unordered_map<std::string, Handle> .在这种情况下,您必须确保在两个映射中执行插入、删除等操作以保持同步。

关于c++ - 通过值查找 map 中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32780046/

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