gpt4 book ai didi

c++ - 从 std::map 获取所有符合条件的条目?

转载 作者:太空狗 更新时间:2023-10-29 21:39:44 25 4
gpt4 key购买 nike

C# 中,我可以:

someCollection.Where(element => // apply some condition on element)

C++ 中是否有等效项?

具体来说,我有一个 map 定义为:

std::map<int, std::set<int>> myMap;

我想提取所有条目(不仅仅是键,我需要键和值),这样:

// Pseudo
auto entries = myMap.Where(element => element.second.size() == 3);

此功能是否存在于 std 中?

最佳答案

template<class R,class Test
class T=std::decay_t<decltype(*std::begin(std::declval<R&>()))>>
auto where(R&& r, Test&& test)
-> std::vector<T>
{
std::vector<T> ret;
for(auto&& x:r)
if(test(x))
ret.emplace_back(x);
return ret;
}

是替代品的下降。

它使用 C++11。您向它传递一个容器或范围,以及一个 lambda 测试函数。

T 的计算有点奇怪(它在编译时计算传入的容器/范围的类型,并支持平面 C 风格数组)。

std::begin(r)r 范围内的开始迭代器。我们取消引用它,获取该类型,然后将(可能是引用)类型“衰减”为适合存储的内容。

使用:

std::map<std::string, int> bob;

// ...

auto v = where(bob, [&](auto&& x){
x.first == "hello"; // key is hello
});

auto&& 部分使用 C++14。在 C++11 中我们得到

auto v = where(bob, [&](std::pair<const std::string, int>const &x){
x.first == "hello"; // key is hello
});

有点啰嗦

关于c++ - 从 std::map 获取所有符合条件的条目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32165016/

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