c++ - 如何从 unordered_map 中获取具有最高值的键?

标签 c++ algorithm unordered-map

我有以下代码,用于查找键是否存在,如果存在,则返回键和值:

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_mapmap 中,值都是可修改的,您可以随时修改存储在任何键下的值,并且 map 根本不在乎。那么,考虑到这一点,您如何期望您的 map 能够做到这一点?

关于c++ - 如何从 unordered_map 中获取具有最高值的键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67248510/

相关文章:

algorithm - 采访: Suggest a data structure which optimizes insertion,删除和随机值生成

objective-c - 逐个字符循环遍历两个字符串以查找部分字谜

c++ - 访问结构数组中的 std::unordered_map 时出现浮点错误

c++ - 与 c/c++ 中的结构指针混淆

c++ - 无法理解函数

c++ - 在初始化列表中引用类成员是未定义的行为吗?

c++ - 用于 ssh 和 scp 的面向对象的 C++ 库

algorithm - 数组所有可能子数组的最大值

c++ - std::unordered_map 的递增迭代器

c++ - std::unordered_map 如何处理冲突?