按 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
。你不能有两个具有相同键的对象,我假设你正在尝试使用 O
的 m_id
字段作为你的键。请尝试使用 std::multimap
。
并且,要计算项目的数量,请使用 map::count()
(对于 std::map 只能 return 一或零!)
由于您使用 std::map
,每个键只有一个值。如果您为一个键插入了不同的值,那么您 会用新的值覆盖 以前的值。
正如评论中所指出的,避免使用 std::map
有其优化版本的 std
算法。像 std::count_if
和 std::find_if
这样的 而不是 在 std::map
中。
我正在尝试查找 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
。你不能有两个具有相同键的对象,我假设你正在尝试使用 O
的 m_id
字段作为你的键。请尝试使用 std::multimap
。
并且,要计算项目的数量,请使用 map::count()
(对于 std::map 只能 return 一或零!)
由于您使用 std::map
,每个键只有一个值。如果您为一个键插入了不同的值,那么您 会用新的值覆盖 以前的值。
正如评论中所指出的,避免使用 std::map
有其优化版本的 std
算法。像 std::count_if
和 std::find_if
这样的 而不是 在 std::map
中。