私は
struct City {
std::string name;
std::string country;
int population;
};
std::vector<City> cities;
ベクトルを並べ替えるそして、人口に基づいて、それらを並べ替えた後、ベクターにデータを置く:
std::sort(cities.begin(), cities.end(),
[](City& a, City& b) { return a.population > b.population; });
次に最低の項目を削除します。
EDIT ここでは国によって最も低い集団のベクターを作成する異なるバージョンがあります。この時点で、countries
ベクトルルックスを
// Copy
std::vector<City> countries = cities;
// Remove duplicates.
// Note this works in our case because of the way the vector is sorted
auto it = std::unique(countries.begin(), countries.end(),
[](City& a, City& b) { return a.country == b.country; });
countries.resize(std::distance(countries.begin(), it));
:最小の集団と第二のベクターを作成し、今
std::sort(cities.begin(), cities.end(),
[](City& a, City& b) {
if (a.country == b.country) {
return a.population < b.population;
}
else {
return a.country.compare(b.country) < 0;
}
});
:
まず、国と人口でソートするsort
を変更このように:
Lao China 502
Saji India 774
Pubfield UK 332
Huffington USA 7891
あなたはアレイを必要としますか?設計におけるプロセスの一部は、データ構造の選択です。私はまず、文字列のマップのために、都市とサイズを含むカスタム構造体のセットに行きます(そして、後者によって順序付けられます)。その後、マップを反復処理することができ、セットは常に注文されます。パフォーマンスの問題がなければ、問題がうまく説明されているので、私はこれを実行します。 – lorro
配列は必要ではありませんが、私は都市の最小値を見つけてそれを取り除くことを試みました。しかし、それは非常に不十分です。 @StephanLechner – Vilius