-3

だから、ベクトルに格納されているカードのベクトルをソートしようとしています。

ベクトルはstd::vector<CUE>CUE で、「Cards Under Evaluation」を表すクラスで、内部のカードはconst Card*です。必要なのは、私が作成した という関数を使用して内部のカードをソートすることですcompareCards

ただし、次のエラーが発生します。

エラー C2784: 'bool std::operator <(const std::basic_string<_Elem,_Traits,_Alloc> &,const _Elem *)' : 'const std::basic_string<_Elem,_Traits,_Alloc> のテンプレート引数を推測できませんでした&」「CUE」から

関数宣言は という別のファイルTable.hにあり、ソート呼び出しは にありTable.cppます。これはすべて私が作成しているポーカー ゲームのためのものですが、手を並べ替えるとエラーが発生し、私は停止しました。

ハンドを正常にソートしているときに、このエラーを取り除くにはどうすればよいですか?

関連するコードは次のとおりです。

ソートコール:

テーブル.cpp

std::sort(cardvec.begin(), cardvec.end(), compareCards);

関数宣言:

Table.h

bool compareCards(const Card* c1, const Card* c2)
{   
    return c1->GetPip() < c2->GetPip(); 
}

CUE.h

#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;
};
4

2 に答える 2

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
于 2013-10-02T12:32:51.463 に答える
0

Adam の回答に代わるものとして、より現代的なスタイル (ポインターの代わりに値、イニシャライザー リスト、コンパレーターのラムダ、範囲ベースの for ループなど) を使用した同様のソリューションがあります。

ここで実行されていることがわかります: 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);
}
于 2013-10-02T12:43:06.870 に答える