c++ - 用于增加 "vector<pair>"值的优雅而高效的算法

标签 c++

我需要在 vector<pair<int, float>> 中找到一个元素并增加第二个值。 我尝试了一种方法。

template <typename K, typename V>
struct match_first {
    const K _k; match_first(const K& k) : _k(k) {}
    bool operator()(const pair<K, V>& el) const {
        return _k == el.first;
    }
};

例如使用.:

vector< pair<int, float> > vec;
vec.push_back(make_pair(2, 3.0));
vec.push_back(make_pair(3, 5.0));
vec.push_back(make_pair(1, 1.0));

vector< pair<int, float> >::iterator it = find_if(vec.begin(), vec.end(), match_first<int, float>(3));
if (it != vec.end()) {
    it->second += 9;
}

有没有更有效的方法来完成这项任务?

最佳答案

map 看起来更自然:

#include <map>

int main()
{
    std::map<int, float> m;
    m.insert(std::make_pair(2, 3.0));
    m.insert(std::make_pair(3, 5.0));
    m.insert(std::make_pair(1, 1.0));

    auto it = m.find(3);
    if (it != m.end()) {
        it->second += 9;
    }
}

它也会更快,因为查找是 O(log(n))

您可以通过使用 std::lower_bound(或 std::equal_range 如果键可以重复)

关于c++ - 用于增加 "vector<pair>"值的优雅而高效的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18687856/

相关文章:

c++ - 使用 var_arg 为函数调用传递参数

c++ - Windows 中禁用控件绘画的算法?

c++ - 如何在函数中初始化 MPI?

C++ 在作为函数传递后从父级转换为子级?

c++ - 从内存位置十六进制转储

c++ - QPID C++ Client 多线程优化

android - 如何从 Android 应用程序调用 C/C++ 二进制文件(在 linux 服务器上移植)

c++ - 如何保存 vector 迭代器的值?

c++ - SFML 鼠标点击检测

c++ - #include <文件名> 和 #include "filename"之间有什么区别?