一部の std::map の値がすべてのキーに対して等しいかどうかを確認する最も簡単な方法は何ですか? 1回の施術でできますか?
質問する
3531 次
4 に答える
4
std::all_of
最初の要素の値を取得してから、カスタム述語を使用して残りの要素を確認します。何かのようなもの:
if (!mp.empty()) {
int val = mp.begin()->second;
result = std::all_of(std::next(mp.begin()), mp.end(),
[val](typename <insert map type>::const_reference t){ return t->second == val; });
}
于 2012-10-10T15:56:24.503 に答える
2
を使用std::unique
して、マップの開始イテレータと返される終了イテレータの間の距離がstd::unique
1 であることを確認します。
于 2012-10-10T12:33:30.243 に答える
0
この機能はあなたのニーズに合うかもしれません
template <typename Map>
bool IsUnique(const Map& i_map)
{
return std::count_if(i_map.cbegin(), i_map.cend(),
[&i_map] (typename Map::const_reference v)
{
return v.second == i_map.cbegin()->second;
}) == i_map.size();
}
于 2012-10-10T13:23:15.393 に答える
0
冗長な比較を 1 つ行うことができる場合は、std::all_of を使用して空のマップをチェックする if ステートメントを使用しなくても実行できます。
template<typename Key, typename Value>
bool all_equal(std::map<Key, Value> const& map)
{
// the lambda will only get called when the map is not empty
// so we can safely access begin()->second
auto const cmpWithFirst = [&](std::pair<Key,Value> const& i)
{
return map.begin()->second == i->second;
};
return std::all_of(map.begin(), map.end(), cmpWithFirst);
}
これは、最初の要素に対する最初の要素の比較を含め、すべての要素を最初の要素と比較します。
于 2013-03-26T13:10:15.623 に答える