[core] Switch to ankerl::unordered_dense

Signed-off-by: x7z4w <x7z4w@noreply.codeberg.org>
This commit is contained in:
x7z4w
2025-11-24 17:34:56 +00:00
parent 03132c6877
commit ef6522ed28
282 changed files with 4386 additions and 1456 deletions

View File

@@ -118,9 +118,9 @@ using NodePoints = std::vector<NodePoint>;
using CrossBorderIndexes = std::vector<size_t>;
std::pair<NodePoints, CrossBorderIndexes> GetCrossBorderPoints(
std::vector<uint64_t> const & nodeIds, std::unordered_map<uint64_t, ms::LatLon> const & nodes,
std::vector<uint64_t> const & nodeIds, ankerl::unordered_dense::map<uint64_t, ms::LatLon> const & nodes,
feature::CountriesFilesAffiliation const & mwmMatcher,
std::unordered_map<std::string, NumMwmId> const & regionToIdMap)
ankerl::unordered_dense::map<std::string, NumMwmId> const & regionToIdMap)
{
NodePoints nodePoints;
CrossBorderIndexes crossBorderIndexes;
@@ -202,9 +202,10 @@ std::optional<std::pair<m2::PointD, double>> GetPointInMwm(NodePoints const & po
}
bool FillCrossBorderGraph(CrossBorderGraph & graph, RegionSegmentId & curSegmentId,
std::vector<uint64_t> const & nodeIds, std::unordered_map<uint64_t, ms::LatLon> const & nodes,
std::vector<uint64_t> const & nodeIds,
ankerl::unordered_dense::map<uint64_t, ms::LatLon> const & nodes,
feature::CountriesFilesAffiliation const & mwmMatcher,
std::unordered_map<std::string, NumMwmId> const & regionToIdMap)
ankerl::unordered_dense::map<std::string, NumMwmId> const & regionToIdMap)
{
auto const & [nodePoints, crossBorderIndexes] = GetCrossBorderPoints(nodeIds, nodes, mwmMatcher, regionToIdMap);

View File

@@ -16,10 +16,11 @@
#include <memory>
#include <set>
#include <string>
#include <unordered_map>
#include <utility>
#include <vector>
#include "3party/ankerl/unordered_dense.h"
namespace routing
{
// Road way and regions through which it passes.
@@ -33,14 +34,14 @@ struct RoadData
OsmElement m_way;
};
using RoadsData = std::unordered_map<uint64_t, RoadData>;
using HighwayTypeToRoads = std::unordered_map<std::string, RoadsData>;
using RoadsData = ankerl::unordered_dense::map<uint64_t, RoadData>;
using HighwayTypeToRoads = ankerl::unordered_dense::map<std::string, RoadsData>;
// Ways and corresponding nodes of roads extracted from OSM file.
struct RoadsFromOsm
{
HighwayTypeToRoads m_ways;
std::unordered_map<uint64_t, ms::LatLon> m_nodes;
ankerl::unordered_dense::map<uint64_t, ms::LatLon> m_nodes;
};
// Reads roads from |reader| and finds its mwms with |mwmMatcher|.
@@ -50,9 +51,10 @@ RoadsFromOsm GetRoadsFromOsm(generator::SourceReader & reader, feature::Countrie
// Fills |graph| with new segments starting from |curSegmentId|. Segments are calculated from the
// road consisting of |nodeIds| from OSM.
bool FillCrossBorderGraph(CrossBorderGraph & graph, RegionSegmentId & curSegmentId,
std::vector<uint64_t> const & nodeIds, std::unordered_map<uint64_t, ms::LatLon> const & nodes,
std::vector<uint64_t> const & nodeIds,
ankerl::unordered_dense::map<uint64_t, ms::LatLon> const & nodes,
feature::CountriesFilesAffiliation const & mwmMatcher,
std::unordered_map<std::string, routing::NumMwmId> const & regionToIdMap);
ankerl::unordered_dense::map<std::string, routing::NumMwmId> const & regionToIdMap);
// Dumps |graph| to |path|.
bool WriteGraphToFile(CrossBorderGraph const & graph, std::string const & path, bool overwrite);

View File

@@ -17,9 +17,10 @@
#include <memory>
#include <set>
#include <string>
#include <unordered_map>
#include <vector>
#include "3party/ankerl/unordered_dense.h"
#include <gflags/gflags.h>
DEFINE_string(path_resources, "", "CoMaps resources directory");
@@ -54,7 +55,7 @@ int main(int argc, char ** argv)
storage::Storage storage;
std::shared_ptr<NumMwmIds> numMwmIds = CreateNumMwmIds(storage);
std::unordered_map<std::string, NumMwmId> regionsToIds;
ankerl::unordered_dense::map<std::string, NumMwmId> regionsToIds;
numMwmIds->ForEachId([&regionsToIds, &numMwmIds](NumMwmId id)
{