C++ 如何在std::map中找到至少有一个数据成员等于键的结构元素
我有一个问题,关于如何找到对应的元素,该元素至少有一个数据编号等于在带有结构的C++ 如何在std::map中找到至少有一个数据成员等于键的结构元素,c++,struct,stdmap,C++,Struct,Stdmap,我有一个问题,关于如何找到对应的元素,该元素至少有一个数据编号等于在带有结构的std::map中搜索的键 例如,假设我要在电话簿中找到一个姓名为或id的人的电话号码(假设没有一个姓名被多人使用),我将声明一个名为Person的struct,并定义一个std::map,其中包含Person对象和他/她的电话号码(在std::string中): struct-Person{ std::字符串名; std::字符串id; }; 地图电话簿; 当我从互联网上搜索时,我知道结构需要重载==,std::m
std::map
中搜索的键
例如,假设我要在电话簿中找到一个姓名为或id的人的电话号码(假设没有一个姓名被多人使用),我将声明一个名为Person
的struct
,并定义一个std::map
,其中包含Person
对象和他/她的电话号码(在std::string
中):
struct-Person{
std::字符串名;
std::字符串id;
};
地图电话簿;
当我从互联网上搜索时,我知道结构需要重载
==
,std::map
仅根据操作符进行定义,正如@Max Langhof指出的,当映射按键排序时,只能使用find()
在映射中搜索键。要使用value(在您的例子中是name)进行搜索,您可以使用简单的遍历所有键。尽管这种方法效率不高,因为您必须搜索地图中的每条记录
for (auto it = phonebook.begin(); it != phonebook.end(); it++)
{
if (it->second == "001")
{
return it->first;
}
}
// If you reach here, then value was not found
std::cout << "Cannot find the phone number for 001" << std::endl;
for(自动it=phonebook.begin();it!=phonebook.end();it++)
{
如果(它->秒==“001”)
{
返回->第一个;
}
}
//如果到达此处,则未找到值
std::cout与合适的(或其他函子)一起使用?使用两个映射,每个键对应一个。感谢您的回答,我个人认为,如果我遍历容器进行搜索,我认为std::vector
可能是更好的选择。:-)@杨汉林:我同意向量在这种情况下是好的,因为我们无论如何都要遍历所有节点(在最坏的情况下)。但这样一来,您将失去按键查找值的优势。因为在您的情况下,您需要同时按键和值进行搜索,所以至少使用map会更好(至少可以在O(logn)时间复杂度中搜索一个参数)。
for (auto it = phonebook.begin(); it != phonebook.end(); it++)
{
if (it->second == "001")
{
return it->first;
}
}
// If you reach here, then value was not found
std::cout << "Cannot find the phone number for 001" << std::endl;