次のスニペットがあるとします。
int compareFoo(std::string** a, std::string** b) {
return (**a).compare(**b);
}
int main() {
std::string** foo = new std::string*[3];
foo[0] = new std::string("a");
foo[1] = new std::string("c");
foo[2] = new std::string("b");
sort(foo,foo+3,compareFoo);
for (int i = 0; i < 3; i++) {
std::cout << *foo[i] << std::endl; // print acb
}
}
sortの3番目のパラメータ(compare)を省略した場合、メモリアドレスの観点からソートされた3つの文字列が得られますが、これは意図した方法ではありません。しかし、メモリアドレスを比較しないようにcompareFoo関数をパラメータ化するにはどうすればよいですか。
void sort(RandomAccessIterator first, RandomAccessIterator last, Compare comp);
cplusplus.comでのSortの説明は非常にあいまいで、与えられた例は単純です。イテレータが必要ですが、スタンドコンテナでしか動作しないということですか?ありがとうございました