gpt4 book ai didi

C++ 自定义成员比较函数

转载 作者:行者123 更新时间:2023-11-30 00:47:49 25 4
gpt4 key购买 nike

请考虑以下代码。我收到编译错误。我应该如何编写自定义比较函数。

#include <iostream>
#include <vector>
#include <boost/cstdint.hpp>
#include <utility>
#include <algorithm>


class X
{
public:
std::vector<std::pair<boost::uint64_t, boost::uint64_t> > vec;
bool cmp(const std::pair<boost::uint64_t, boost::uint64_t>& d1,
const std::pair<boost::uint64_t, boost::uint64_t>& d2);
void foo(void);
void print(void);
};

bool X::cmp(const std::pair<boost::uint64_t, boost::uint64_t>& d1,
const std::pair<boost::uint64_t, boost::uint64_t>& d2)
{
return d1.first < d2.first;
}

void X::foo(void)
{
vec.push_back(std::make_pair(1000, 100));
vec.push_back(std::make_pair(800, 200));
std::sort(vec.begin(), vec.end(), cmp);
}

void X::print(void)
{
for (auto it = vec.begin(); it != vec.end(); ++it)
{
std::cout << it->first << std::endl;
}
}

int
main()
{
X x;
x.foo();
x.print();
return 0;
}

编译错误:

 g++ --std=c++11 custom_cmparator.cpp 

custom_cmparator.cpp: In member function ‘void X::foo()’:
custom_cmparator.cpp:28:40: error: no matching function for call to ‘sort(std::vector<std::pair<long unsigned int, long unsigned int> >::iterator, std::vector<std::pair<long unsigned int, long unsigned int> >::iterator, <unresolved overloaded function type>)’
std::sort(vec.begin(), vec.end(), cmp);

我应该如何指定 std::sort(vec.begin(), vec.end(), cmp);

最佳答案

让它成为静态成员函数或根本不是成员。

如果您需要访问比较器中的类成员(尽管您的示例不需要它),您可以使用下面评论中提到的任何一种方式或这样的 lambda:

std::sort(vec.begin(), vec.end(),
[this](const std::pair<boost::uint64_t, boost::uint64_t>& d1,
const std::pair<boost::uint64_t, boost::uint64_t>& d2) {
return this->cmp(d1, d2);
}
);

关于C++ 自定义成员比较函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33577272/

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