代码之家  ›  专栏  ›  技术社区  ›  mchd

如何从具有最高值的无序_映射中获取密钥?

  •  0
  • mchd  · 技术社区  · 5 年前

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

    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 在所有以 ,我想回去 ladder .

    有没有一种方法可以在不使用暴力的情况下有效地做到这一点?

    1 回复  |  直到 5 年前
        1
  •  2
  •   Sam Varshavchik    5 年前

    不,没有内置的方法可以做到这一点。这就是“无序”的意思。根据定义:无序映射中的值不会以任何特定顺序存储。

    即使是普通的,有秩序的 std::map :如果使用得当,其可用方法将为您提供的唯一信息是键的范围,但您仍需要搜索所有键。

    请注意,在 unordered_map 或者 map ,这些值是可修改的,您可以随时修改存储在任意键下的值,地图也不会在意。那么,考虑到这一点,你认为你的地图有什么办法可以做到这一点呢?