我为我的类重载了交换函数,就像这个回答中所示,但是在排序(std::sort
)时,编译器仍然使用std::swap
。我没有看到我的方法和链接答案中的方法之间有任何区别。以下是我代码的复现:
#include <vector>
#include <iterator>
#include <algorithm>
#include <iostream>
struct B
{
struct A
{
friend void swap(A & a, A & b)
{
std::swap(a.a, b.a);
std::cout << "my swap\n";
}
A(int _a) : a(_a) {}
bool operator<(const A & other) { return a < other.a; }
int a;
};
};
int main()
{
std::vector<B::A> v{1, 2, 3, 5, 4};
std::sort(std::begin(v), std::end(v));
}
此外,还提供了可执行示例,请点击这里。
std
命名空间内调用。也许它并没有被std::sort
使用。 - user7860670std::swap
被调用了吗?另外,你到底想做什么? - txtechhelp