請考慮下面的一段代碼。我收到一個編譯錯誤。我應該如何編寫自定義比較函數。C++自定義成員比較功能
#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 ::排序(vec.begin(),vec.end(),CMP);
出於好奇,爲什麼使用boost :: uint64_t中在從cstdint的類型?您似乎已經在使用C++ 11。 –
這是項目配置的方式。 – gudge