先週私はCatalysts Coding Contestに参加しましたが、今ではよりハイレベルのC++でタスクを再作成しようとしています。だから私はstd::unordered_map
をキー値としてstd::string
とマッピングされたタイプとしてdouble
とすることに決めました。unordered_mapとstd :: stringを辞書順に並べ替え
データは次のようになります。上の
N0 1.23
N1 2.45
ので。
今問題は、私は文字列でこれを並べ替えることです。しかし、それは常に1 < 3
ので
N3 1.23
N10 4.56
のような大きな数字を並べ替えしようと、それはそれを文字の文字を比較したとき台無し。今私はすでにstd::sort
関数を試しましたが、私は実際にどのように3番目のパラメータが動作するのか分かりません。
誰かが私に説明することができますか、これを解決する手がかりがあります。ここ
は、関連するソースコードである:
std::unordered_map <std::string, unsigned int> network;
unsigned int network_power = 1234;
std::unordered_map <std::string, double> network_percent;
for (std::pair<std::string, unsigned int> element : network) {
double x = ((double)element.second/(double)network_power) * 100;
x = (int)(x * 100 + 0.5)/100.0;
network_percent.insert({element.first, x});
}
端ではなければならない昇順に出力network_percent
の各要素。事前に
おかげ フィリップ
PS:私はすでにStackOverflowの上の他の記事を見つけましたが、それらを理解していません。
EDIT:申し訳ありませんが、これを書いたのは遅かったです。
次のようになりますまで、コードは私が得たソートする:ピーター・ベッカーは、私はそれが非辞書式順序でそれをソートしたいと述べたよう
std::sort(network_percent.begin(), network_percent.end());
。私が得たときにデータが好き:キー以上の1桁を持ったときに、それが台無しに現時点で
N0 218
N1 92
N2 296
N3 69
N4 135
N5 68
N6 157
N7 106
N8 74
N9 309
N12 576
:
N1 92
N9 309
N2 296
N7 106
N0 218
N3 69
N4 135
N5 68
N6 157
N8 74
N12 576
が、私はそれのようにソートします。私の質問です:それは私が望むようにそれをソート機能がありますか?
ここに示したコードは、何も並べ替えを試みていないようです。キーと値のペアをソートしようとした特定のコードを投稿できますか? – templatetypedef
N10は辞書順にN3の前にあります。あなたが望むのは、**辞書編集的なものではないものです。 'std :: set'の比較関数を書くことができますが、まずその関数が何をすべきかを**正確に**記述する必要があります。 2つか3つのサンプル値を与えることはそれをしません。 –