2016-12-05 4 views
0

私はヘッダー専用のjsonライブラリを使用していて、std::mapを使用しています。私はそれを注文しないことを望むだろうが。std :: map not orderを持っている

https://github.com/nlohmann/json/blob/develop/src/json.hpp#L371

私が修正できる場合、私は思ったんだけど、スニペットがあります。 「ObjectType」がstd::mapであると仮定します。そこから注文を削除する方法がありますか、何とかしてstd::less<StringType>を無関係にします。

std::unordered_mapをサポートするようにソースを変更すると、それに値する作業が大きすぎるようです。

+0

マップを注文しないようにすると、どのようなメリットがありますか? – Jesin

+1

'std :: unordered_map'として動作するように' std :: map'を変更したいですか?もしそれが可能であれば、 'std :: unordered_map'は存在しませんでした...とにかく、実際のソースコードを変更することなく、キャッシュバックはありません... – DeiDei

+0

[std :: map](http: /en.cppreference.com/w/cpp/container/map)があります。注 - * std :: mapはソートされた連想配列です。*。 – PaulMcKenzie

答えて

1

まず、std::unordered_mapは、挿入順を保持しないため、ここで実行可能な解決策ではありません。ここでの "順序付けられていない"とは、どんな順序でもほとんど無知であることを意味します。

  • 変更std::mapインデックス番号を鍵またはstd::vectorstd::mapを置き換える:

    は、代わりにあなたの特定のタスクのために、あなたはので、ここでいくつかのオプションがあり、何とか元の挿入順序を保存します。後者は、JSONオブジェクトが大きくなりすぎないように、線形検索では目立つ欠点が導入されない可能性があるため、オブジェクト名で検索する機能を保持したい場合でも実際には意味があります。
  • 希望の注文を別々に保管する方法を見つける。キーのstd::vectorでストレージを処理できます。また、イテレータのトリッキーを追加して、コンテナサイクルを優先順序(例: begin()およびend()の方法をオーバーロードすることによって。
  • 対応策として複数キーマップを使用する - boost::multiindexがデフォルトの選択です。
+0

私はstd :: vectorが達成することができることに同意しますが、それをサポートするために最大10000行のコードを翻訳しようとしているときに問題が発生します。 –

関連する問題