【发布时间】:2014-09-11 01:01:36
【问题描述】:
我有一个 std::multiset,它存储 std::pair。我希望第一个属性对唯一性没有限制,但我希望第二个属性是唯一的。所以,我决定将我自己的函数传递给 multiset,以实现这一点(如果没有,请告诉我)。
根据this 的回答,我写了一个类似的函数,但它失败了,我不知道为什么(不知道 λ - 我是希腊人:))。
auto f = [](std::pair<float, int>& a, std::pair<float, int>& b) {
return (a.first < b.first && a.second != b.second);
};
错误:
error: expression ‘#‘lambda_expr’ not supported by dump_expr#<expression error>’ is not a constant-expression
sorry, unimplemented: non-static data member initializers
error: unable to deduce ‘auto’ from ‘<expression error>’
【问题讨论】:
-
这意味着我走错了路@T.C.。我该怎么办?
-
我不明白你的唯一性标准。您正在使用
multiset,因此多个比较相等的键将存储在容器中。 -
我认为主要问题是 lambda 需要采用
const &或按值 -
您之前的评论似乎表明您认为 multiset 与多线程有关。容器根本不是线程安全的,除了
const成员函数,可以并发访问。 multi 仅表示容器将存储重复项,即比较相等的键。set只会存储唯一的密钥。 -
如果不是希腊语,那就是野蛮人。
标签: c++ c++11 stl lambda multiset