如何从具有最高值的 unordered_map 中获取密钥?

How to get the key from an unordered_map with the highest value?

我有以下代码查看键是否存在,如果存在,return是键和值:

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 开头的元素中也具有最高值,我想要 return ladder.

有没有一种不用暴力破解就能有效地做到这一点的方法?

不,没有执行此操作的内置方法。这就是“无序”的意思。根据定义:无序映射中的值不以任何特定顺序存储。

即使是常规的、有序的 std::map:如果使用得当,它可用的方法唯一能给你的就是键的范围,但你仍然需要搜索所有键。

请注意,无论是unordered_map还是map中的值都是可以修改的,你可以随时修改任何键下存储的值,地图不会关心根本。那么,鉴于此,您如何期望您的地图甚至有任何方式做到这一点?