文字列のサフィックスを並べ替えたい。これを行う最も簡単な方法は、すべてのサフィックスをマップに入れることです。メモリを効率的に使用するために、接尾辞を (str+i) として渡します。ここで、str は char* で、i は開始位置の接尾辞です。ただし、 map はこれらのサフィックスをソートしないことがわかりました。ここに例があります
typedef std::map < char*, int,Comparator> MapType;
MapType data;
// let's declare some initial values to this map
char* bob=(char* )"Bobs score";
char* marty=(char* ) "Martys score";
data.insert(pair<char*,int>(marty+1,15));
data.insert(pair<char*,int>(bob+1,10));
MapType::iterator end = data.end();
for (MapType::iterator it = data.begin(); it != end; ++it) {
std::cout << "Who(key = first): " << it->first;
std::cout << " Score(value = second): " << it->second << '\n';
}
出力は
誰 (キー = 1 番目): obs スコア スコア (値 = 2 番目): 10 Who(キー = 1 番目): artys スコア スコア (値 = 2 番目): 15
ただし、strcmp
文字列を比較するための標準関数は、bob+1 と marty+1 に対して正しく機能します。marty+1 は bob+1 よりも小さいと言われています。