按 std::multimap 中的对象 ID 计算出现次数

Count occurrences by object id in std::multimap

我正在尝试查找 std::multimap

中某个对象的出现次数

这是我的对象点:

class Point
{
public:

    Point(string id, float x, float y, float z);

    string m_id;
    float m_x;
    float m_y;
    float m_z;

    //I want to count with this operator
    bool operator==(const Point &point) const
    {
        return point.m_id == m_id;
    }

    bool operator <( const Point &point ) const
    {
        return ( m_y < point.m_y );
    }

};

这是我的函数(解决方案):

int countOccurences(multimap<Point, string> multimap, Point point)
{
    int result = 0;

    for (auto it = multimap.begin(); it != multimap.end(); it++)
        if (it->first == point)
            result++;

    return result;
}

我的主要:

multimap<Point, string> places;

Point point1("point", 0, 0, 0 );
Point point2("cake", 0, 0, 0 );
Point point3("point", 0, 0, 0 );

places.insert(make_pair(point1, ""));
places.insert(make_pair(point2, ""));
places.insert(make_pair(point3, ""));

cout << "CORRECT = 2" << endl;
cout << "COUNT = " << places.count(point3) << endl;
cout << "MY_COUNT = " << countOccurences(places, point3) << endl;

本来想用==运算符来统计出现的次数,但是用运算符<来统计。使用函数 countOccurrences() 是我的解决方案。

But it doesn't works, il only returns 1 and there are at least 2 objects in my map that have same id

这是一个std::map。你不能有两个具有相同键的对象,我假设你正在尝试使用 Om_id 字段作为你的键。请尝试使用 std::multimap

并且,要计算项目的数量,请使用 map::count()(对于 std::map 只能 return 一或零!)

由于您使用 std::map,每个键只有一个值。如果您为一个键插入了不同的值,那么您 会用新的值覆盖 以前的值。

正如评论中所指出的,避免使用 std::map 有其优化版本的 std 算法。像 std::count_ifstd::find_if 这样的 而不是 std::map 中。