簡體   English   中英

C ++ STD :: MAP復雜密鑰搜索

[英]C++ STD::MAP Complex Key Search

我對庫的訪問權限有限,所以雖然使用boost :: multi_index可以解決我的問題但是我無法使用它。

我當前的地圖設置是:結構中包含大量的信息,例如我還需要搜索的INT。 我希望的是一個結構,以便我可以通過int或string搜索並返回結構值。 我假設我將不得不寫密鑰但是,來這里尋求其他建議。

想法?

我有點困惑。 你似乎在說你有這樣的結構:

(psudocode)

struct Gizmo
{
  Gizmo(int foo, string bar) : foo_(foo), bar_(bar) {};
  int foo_;
  string bar_;
};
Gizmo make_gizmo(int foo, string bar) { return Gizmo(foo,bar); }
std::map<string, Gizmo> my_gizmos;

my_gizmos["aaa"] = make_gizmo(1,"hello");
my_gizmos["bbb"] = make_gizmo(2,"there");

...並且您希望能夠通過foo_的值搜索Gizmo

在這種情況下,您有2個主要選項。

1)自己寫一個自定義仿函數(再次psudocude):

struct match_foo : public std::unary_function<...>
{
  match_foo(int foo) : foo_(foo) {};
  bool operator()(map<string,Gizmo>::const_iterator it) const
  {
    return it->second.foo_ == foo_;
  } 
private:
  int foo_;
};

map<string,Gizmo>::const_iterator that = find_if(my_gizmos.begin(), my_gizmos.end(), match_foo(2));
};

2)創建foo_值的索引,映射回主mapGizmo 這張地圖可能看起來像這樣... a

   map<int,map<string,Gizmo>::const_iterator> foo_index;

...當你更新主地圖my_gizmos時,你會維護my_gizmos

如果您的搜索實際上是窗口查詢(意味着您必須在[param0_0,peram0_1] x [param1_0,param1_2] x ...)中返回值,那么您可以使用范圍樹結構來提高效率。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM