1. ホーム
  2. c++

[解決済み] std::vector<std::string>を構築して、それらをソートするにはどうすればよいのでしょうか?

2022-01-25 20:58:31

質問

私はソートする必要がある文字列の束を持っています。これを行うには、std::vectorが最も簡単な方法だと思います。しかし、私は今までベクトルを使用したことがないので、いくつかの助けを求めています。

英数字順に並べるだけで、特別なことはしていません。確かに、string::compare 関数でうまくいきますね。

その後、ソートされていることを確認するために、どのように反復処理すればよいのでしょうか?

今のところ、こんな感じです。

std::sort(data.begin(), data.end(), std::string::compare);

for(std::vector<std::string>::iterator i = data.begin(); i != data.end(); ++i)
{
    printf("%s\n", i.c_str);
}

解決方法は?

を実行すればよいのです。

std::sort(data.begin(), data.end());

そして、文字列をソートしてくれます。そして、文字列が順番通りに並んでいるかどうかをチェックします。

if(names.empty())
    return true; // empty vector sorted correctly
for(std::vector<std::string>::iterator i=names.begin(), j=i+1; 
        j != names.end(); 
        ++i, ++j)
    if(*i > *j)
        return false;
return true; // sort verified

特に std::string::compare は比較演算子として使うことはできません。 sort はそれを望んでいるのです。第一引数が第二引数より小さければ真を、そうでなければ偽を返します。もし sort のようにすると、単に operator< で、これはまさにその通りです(つまり std::string を返すようにします。 first.compare(second) < 0 ).