diff options
author | Minh Nguyễn <mxn@1ec5.org> | 2016-05-31 09:03:02 -0700 |
---|---|---|
committer | Minh Nguyễn <mxn@1ec5.org> | 2016-06-01 12:07:53 -0700 |
commit | fcacbb87ef9a808bf3554e60c978710c04cff9f5 (patch) | |
tree | 097437937cff9bf6f5dc09955a543b7b94c1a342 /src/mbgl/tile | |
parent | f7ce5b3a7b16f1152059b9fb519993b0fa680267 (diff) | |
download | qtlocation-mapboxgl-fcacbb87ef9a808bf3554e60c978710c04cff9f5.tar.gz |
[core] Store feature keys in same order as in vector tile
The keys in the vector tile may not be in alphabetical order. Building a vector of keys by looping over std::map<std::string, …> effectively sorts the keys by alphabetical order without sorting the associated values. This change inserts keys in the same order in which they appear in the vector tile.
Diffstat (limited to 'src/mbgl/tile')
-rw-r--r-- | src/mbgl/tile/vector_tile.cpp | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/src/mbgl/tile/vector_tile.cpp b/src/mbgl/tile/vector_tile.cpp index 4af6a12271..8a69a82314 100644 --- a/src/mbgl/tile/vector_tile.cpp +++ b/src/mbgl/tile/vector_tile.cpp @@ -191,7 +191,10 @@ VectorTileLayer::VectorTileLayer(protozero::pbf_reader layer_pbf) { features.push_back(layer_pbf.get_message()); break; case 3: // keys - keysMap.emplace(layer_pbf.get_string(), keysMap.size()); + { + auto iter = keysMap.emplace(layer_pbf.get_string(), keysMap.size()); + keys.emplace_back(std::reference_wrapper<const std::string>(iter.first->first)); + } break; case 4: // values values.emplace_back(parseValue(layer_pbf.get_message())); @@ -207,10 +210,6 @@ VectorTileLayer::VectorTileLayer(protozero::pbf_reader layer_pbf) { break; } } - - for (auto &pair : keysMap) { - keys.emplace_back(std::reference_wrapper<const std::string>(pair.first)); - } } util::ptr<const GeometryTileFeature> VectorTileLayer::getFeature(std::size_t i) const { |