gpt4 book ai didi

c++ - 计算 map 中相同值的数量

转载 作者:可可西里 更新时间:2023-11-01 18:06:18 24 4
gpt4 key购买 nike

是否有任何命令可以计算 map 中相同值的数量?

喜欢:

map<int, string> m;
m[1] = "A";
m[22] = "A";
m[53] = "C";
m[12] = "A";
m[6] = "A";

int count = m.count("A");// 4

还是我应该自己写,因为它不太难?

最佳答案

您可以将 count_if 算法与自定义谓词函数对象一起使用:

template <typename Pair>
struct second_equal_to
: std::unary_function<const Pair&, bool>
{
second_equal_to(const typename Pair::second_type& value)
: value_(value) { }

bool operator()(const Pair& p) const
{
return p.second == *value_;
}

private:
typename Pair::second_type value_;
};

用法:

typedef std::map<int, std::string> Map;
typedef Map::value_type MapEntry;
std::count_if(m.begin(), m.end(), second_equal_to<MapEntry>("A"));

或者,对于更通用的解决方案,您可以编写一个 apply_to_second 谓词转换器:

template <typename Pair, typename Predicate>
struct apply_to_second_f
: std::unary_function<const Pair&, bool>
{
apply_to_second_f(const Predicate& p)
: predicate_(p) { }

bool operator()(const Pair& p) const
{
return predicate_(p.second);
}

Predicate predicate_;
};

template <typename Pair, typename Predicate>
apply_to_second_f<Pair, Predicate> apply_to_second(const Predicate& p)
{
return apply_to_second_f<Pair, Predicate>(p);
}

用法:

std::count_if(m.begin(), m.end(), 
apply_to_second<MapEntry>(std::bind2nd(std::equal_to<std::string>(), "A")));

如果你有一个支持 lambda 表达式的编译器,你根本不需要任何自定义谓词仿函数;您可以使用更简单的 lambda:

std::count_if(m.begin(), m.end(), [](const MapEntry& e) { 
return e.second == "A";
});

关于c++ - 计算 map 中相同值的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5517615/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com