しかし,出力結果で不具合が出たので質問させてください.
return num1.sei > num2.sei; return num1.mei > num2.mei;
となっていますが,それぞれの不等号を < に変更すると
何も表示されなくなってしまいました.
<sample>
">" バージョン
e: E
d: D
c: C
b: B
a: A
"<" バージョン
:
:
:
:
:
これは何が原因となっているのでしょうか?
どちらか一方に限定して,ソートを行うべきなのでしょうか?
また,メンバ変数をprivateにするとコンパイルエラーでした.
コンストラクタで値の変更を行っているのにエラーになるのはなぜでしょうか?
#include <vector>
#include <algorithm>
#include <iostream>
class sample_string {
public:
std::string sei;
std::string mei;
sample_string(const std::string& nm="", const std::string& ph="") {
sei = nm;
mei = ph;
}
};
/* 関数オブジェクト */
class CSort1 {
public:
// 関数オブジェクト
bool operator()(sample_string num1, sample_string num2);
};
// 関数オブジェクトの定義
bool CSort1::operator()(sample_string num1, sample_string num2) {
return num1.sei > num2.sei;
}
class CSort2 {
public:
// 関数オブジェクト
bool operator()(sample_string num1, sample_string num2);
};
// 関数オブジェクトの定義
bool CSort2::operator()(sample_string num1, sample_string num2) {
return num1.mei > num2.mei;
}
/* 演算子オーバーロード */
std::ostream& operator<<(std::ostream &os, const sample_string& vi) {
os << vi.sei << ": " << vi.mei;
return os;
}
int main(void) {
// 配列を準備する
std::vector<sample_string> nums(10);
int n = 0;
nums[n++] = sample_string("a", "A");
nums[n++] = sample_string("c", "C");
nums[n++] = sample_string("b", "B");
nums[n++] = sample_string("d", "D");
nums[n++] = sample_string("e", "E");
// 配列の先頭から末尾までの各要素について CSort() を呼び出す(sei)
std::sort( nums.begin(), nums.end(), CSort1() );
// 配列の先頭から末尾までの各要素について CSort() を呼び出す(mei)
std::sort( nums.begin(), nums.end(), CSort2() );
for(int i = 0; i < n; i++) {
std::cout << nums << std::endl;
}
return 0;
}