首页 > 解决方案 > 将迭代器设置为具有最高键的值

问题描述

我有一个带有分数的字符串集合,我想找到得分最高的字符串。现在,由于std::map它的物品是按键排序的,我认为这将是一个完美的存储类。现在我遇到了将迭代器指向最后一项的问题(以检索得分最高的值)。我所拥有的是:

int main(void)
{

    map<double, string> m;

    m.insert(std::pair<double,string>(79.43567,"ARH1265"));
    m.insert(std::pair<double,string>(69.83569,"ZRE5265"));
    m.insert(std::pair<double,string>(73.03261,"TA9318"));
    m.insert(std::pair<double,string>(93.43567,"CRP5285"));

    cout << "size: " << m.size() << endl;

    map<double, string>::iterator it;

    for (it = m.begin(); it != m.end(); it++) {
        cout  << it->first << " : " << it->second << endl;
    }

    it = m.end();
    cout << "last element is: " << it->first << " : " << it->second << endl;

return 0;
}

给我一个输出:

size: 4
69.8357 : ZRE5265
73.0326 : TA9318
79.4357 : ARH1265
93.4357 : CRP5285
last element is: 1.97626e-323 : ARH1265

当我期望得到:

size: 4
69.8357 : ZRE5265
73.0326 : TA9318
79.4357 : ARH1265
93.4357 : CRP5285
last element is: 93.4357 : CRP5285

为什么我没有得到预期?

标签: c++iteratorstdmap

解决方案


或者,改用std::map::rbegin()迭代器。它指向非反转映射的最后一个元素:

auto it = m.rbegin();

或者:

auto it = std::rbegin(m);

推荐阅读