gpt4 book ai didi

c++ - 如何在 C++ 中使用我的自定义比较创建一个集合

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:43:54 24 4
gpt4 key购买 nike

谁能解释一下这个例子中发生了什么here

他们声明如下:

bool fncomp (int lhs, int rhs) {return lhs<rhs;}

然后用作:

bool(*fn_pt)(int,int) = fncomp;
std::set<int,bool(*)(int,int)> sixth (fn_pt)

虽然算法库中排序方法的例子here

可以这样做:

bool myfunction (int i,int j) { return (i<j); }
std::sort (myvector.begin()+4, myvector.end(), myfunction);

我还不明白以下内容:

struct classcomp {
bool operator() (const int& lhs, const int& rhs) const
{return lhs<rhs;}
};

this 关键字运算符(不像在 op.overload 中那样跟在运算符后面)...它的含义是什么?在那里应用的任何运算符都会有这种行为吗?还有这个const修饰符……它造成的效果是什么?

我正在尝试制作一组​​ C 风格的字符串,如下所示:

typedef struct 
{
char grid[7];
} wrap;

bool compare(wrap w1, wrap w2)
{
return strcmp(w1.grid, w2.grid) == -1;
}
set <wrap, compare> myset;

我想我可以创建一个集合来定义我的排序函数,就像我从算法库中调用排序时一样......一旦它没有编译我就去文档并看到这个让我感到困惑的语法......我是否需要像我在此处粘贴的第一个示例中那样声明指向函数的指针?

最佳答案

struct classcomp {
bool operator() (const int& lhs, const int& rhs) const
{return lhs<rhs;}
};

通过重载函数调用运算符 定义仿函数。要使用您可以执行的功能:

int main() {
std::set <wrap, bool (*)(wrap,wrap)> myset(compare);
return 0;

另一种方法是将运算符定义为 wrap 类的一部分:

struct wrap {
char grid[7];
bool operator<(const wrap& rhs) const {
return strcmp(this->grid, rhs.grid) == -1;
}
};

int main() {
wrap a;
std::set <wrap> myset;
myset.insert(a);
return 0;
}

关于c++ - 如何在 C++ 中使用我的自定义比较创建一个集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24359014/

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