我有以下代码,用于查找键是否存在,如果存在,则返回键和值:
std::unordered_map<std::string, int64_t> id_to_last_observation({
{"apple", 10},
{"lily", 12},
{"avocado", 2},
{"derry", 5},
{"elephant", 13},
{"monkey", 33},
{"pineapple", 555},
{"car", 1},
{"ireland", 67},
{"family", 48},
{"laptop", 4},
{"ladder", 90}, // element that begins with l that has the highest value
{"computer", 98},
{"travel", 99},
{"orchestra", 65},
{"party", 16},
{"cube", 5},
{"roller-coaster", 8},
{"snake", 0},
{"map", 11},
{"umbrella", 51},
{"lock", 47},
{"person", 92},
{"phone", 89},
{"pen", 81},
});
std::unordered_map<std::string, int64_t>::iterator it;
it = id_to_last_observation.find("ladder");
if (it != id_to_last_observation.end()){
std::cout << "Element Found - ";
std::cout << it ->first<< "::" << it->second<< std::endl;
}else{
std::cout << "Element Not Found" << std::endl;
}return 0;
但是,我在这里手动执行此操作。我想要做的是获取以我想要的任何字母开头并且具有我想要的任何值(最高、最低等)的元素。因此,如果我想要以 l
开头的元素,并且该元素在以 l
开头的所有元素中也具有最高值,我想返回 ladder
.
有没有一种方法可以有效地做到这一点而不需要暴力破解?
最佳答案
不,没有内置方法可以执行此操作。这就是“无序”的意思。根据定义:无序映射中的值不以任何特定顺序存储。
即使对于常规的、有序的 std::map
:如果使用得当,它的可用方法唯一能给你的是键的范围,但你仍然需要搜索通过他们所有人。
请注意,无论是在 unordered_map
或 map
中,值都是可修改的,您可以随时修改存储在任何键下的值,并且 map 根本不在乎。那么,考虑到这一点,您如何期望您的 map 能够做到这一点?
关于c++ - 如何从 unordered_map 中获取具有最高值的键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67248510/