首页 > 解决方案 > 在地图中寻找最小的数字总是打印 0

问题描述

我正在编写一个程序来查找地图中的最小数字,但它没有按预期工作。预期的结果是 2,但它总是打印 0。

#include <iostream>
#include <map>
using namespace std;

int main()
{
    std::map<int, int> myMap = { {1, 3} , {2, 5}, {3, 22}, {4, 2} };
    int temp = myMap[0];
    for (int i = 1; i <= 4; ++i) {
        if (myMap[i] < temp) {
            temp = myMap[i];
        }
    }
    cout << "smallest number: " << temp << std::endl;
}

标签: c++

解决方案


事后看来,如果不存在(使用有效负载value-initialized ;即在您的情况下为 0 )中插入std::map缺失元素的功能,例如您使用语句的情况std::map

int temp = myMap[0]; // myMap[0] is value-initialised, i.e. is 0.

,可能不是一个好主意。它还带有[]运营商没有的缺点const

但是,从 C++14 开始,您可以简单地编写

auto it = std::min_element(
    myMap.begin(),
    myMap.end(),
    [](const auto& l, const auto& r) { return l.second < r.second; }
);

其次是

std::cout << "smallest number: " << it->second << std::endl;

产生价值。检查当然it是有效的 - 这样它就可以在空容器上工作。


推荐阅读