Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 有没有办法将set与在线比较器一起使用?_C++_Set_Comparator - Fatal编程技术网

C++ 有没有办法将set与在线比较器一起使用?

C++ 有没有办法将set与在线比较器一起使用?,c++,set,comparator,C++,Set,Comparator,我想使用带有比较器lambda函数的set或multiset生成一个RedBlackTree,该函数使用一个数组(为了简单起见全局生成) 程序运行时阵列正在更改 #include <iostream> #include <set> using namespace std; int v[10]; auto x = [](pair<int, int> p1, pair<int, int> p2) { return p1.second+v[p1.firs

我想使用带有比较器lambda函数的set或multiset生成一个RedBlackTree,该函数使用一个数组(为了简单起见全局生成) 程序运行时阵列正在更改

#include <iostream>
#include <set>
using namespace std;
int v[10];
auto x = [](pair<int, int> p1, pair<int, int> p2) { return p1.second+v[p1.first] <   p2.second+v[p2.first]; };
set<pair<int, int>, decltype(x)> s(x);
// i tested multiset with same answer
int main()
{
    s.insert({3, 2});
    s.insert({4, 1});
    s.insert({2, 10});
    s.insert({8, 8});
    v[2]=-100;
    for (auto x : s)
        cout << x.first<<":"<<x.second << endl;
}
但我明白了:

4:1
3:2
8:8
2:10
程序运行时阵列正在更改

#include <iostream>
#include <set>
using namespace std;
int v[10];
auto x = [](pair<int, int> p1, pair<int, int> p2) { return p1.second+v[p1.first] <   p2.second+v[p2.first]; };
set<pair<int, int>, decltype(x)> s(x);
// i tested multiset with same answer
int main()
{
    s.insert({3, 2});
    s.insert({4, 1});
    s.insert({2, 10});
    s.insert({8, 8});
    v[2]=-100;
    for (auto x : s)
        cout << x.first<<":"<<x.second << endl;
}
你不允许有一个比较器函数像那样改变它的行为

在您的示例中,
set
v[2]=-100之前构造赋值,并且在您进行赋值后它恰好保持其顺序,但这不是保证行为


顺便说一句,
#include
是非标准的,它会让你在这个网站上被否决。

我认为这是行不通的。当
集合中已有元素时
不能动态更改排序(在本例中,通过一些全局设置)。它不会重新排列容器。您只是使以前用于对元素排序的不变量无效。这看起来像是破坏数据结构的方法。