所以我试图对存储在矢量中的卡片矢量进行排序。
向量是std::vector<CUE>
CUE是一个代表“评估中的卡片”的类,而里面的卡片是const Card*
。我需要的是使用我创建的名为compareCards
的函数对卡片进行排序。
但是,我生成以下错误:
错误C2784:'bool std :: operator&lt;(const std :: basic_string&lt; _Elem,_Traits,_Alloc&gt;&amp;,const _Elem *)': 无法推断'const的模板参数 的std :: basic_string的&LT; _Elem,_Traits,_Alloc&GT; &安培;”来自'CUE'
函数声明位于另一个名为Table.h
的文件中,排序调用位于Table.cpp
中。这一切都是我正在制作的扑克游戏,但是整理手已经产生了一个让我停下来的错误。
如何在成功整理手牌时摆脱此错误?
以下是相关代码:
Table.cpp
std::sort(cardvec.begin(), cardvec.end(), compareCards);
Table.h
bool compareCards(const Card* c1, const Card* c2)
{
return c1->GetPip() < c2->GetPip();
}
#pragma once
#include <vector>
#include <iostream>
#include "card.h"
struct CUE
{
CUE(void);
~CUE(void);
CUE(const std::vector<const Card*>& c) : _cue(c){}
std::vector<const Card*> _cue;
};
答案 0 :(得分:1)
这是您所呈现的代码风格的一个工作示例(C ++ 98):
#include <algorithm>
#include <iostream>
#include <vector>
struct X {
int n;
X(int v) : n(v) {}
};
bool compare(const X* a, const X* b) {
return a->n < b->n; }
int main() {
std::vector<const X*> v;
v.push_back(new X(5));
v.push_back(new X(4));
v.push_back(new X(6));
for (int i = 0; i < v.size(); ++i) {
std::cout << v[i]->n << " ";
}
std::cout << "\n";
std::sort(v.begin(), v.end(), compare);
for (int i = 0; i < v.size(); ++i) {
std::cout << v[i]->n << " ";
}
std::cout << "\n";
}
输出
5 4 6
4 5 6
答案 1 :(得分:0)
作为Adam的答案的替代方案,使用更现代的风格(值而不是指针,初始化列表,比较器的lambda,基于循环的范围等)的类似解决方案。
您可以在此处看到它:http://coliru.stacked-crooked.com/a/96a4385814c7a4e5
#include <algorithm>
#include <iostream>
#include <vector>
struct X {
int n;
X(int v) : n(v) {}
};
void print(const std::vector<X>& container) {
for (const auto& value : container) {
std::cout << value.n << " ";
}
std::cout << "\n";
}
int main() {
std::vector<X> v{5, 4, 6};
print(v);
std::sort(v.begin(), v.end(), [](const X& a, const X& b){ return a.n < b.n; });
print(v);
}