我对图书馆的访问权限有限,所以虽然使用boost :: multi_index可以解决我的问题,但这是我无法使用的。
我当前的地图设置是: 该结构中包含大量信息,例如我还需要搜索的INT。我希望的是一个结构,以便我可以通过int或string搜索并返回结构值。我假设我将不得不写密钥但是,来这里寻求其他建议。
想法?
答案 0 :(得分:2)
我有点困惑。你似乎在说你有这样的结构:
(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");
...您希望能够按Gizmo
的值搜索foo_
?
在这种情况下,您有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_
值的索引,映射回主Gizmo
中的map
。这张地图可能看起来像这样
...
一个
map<int,map<string,Gizmo>::const_iterator> foo_index;
...每次更新主地图时都会保留my_gizmos
。
答案 1 :(得分:0)
如果您的搜索实际上是窗口查询(意味着您必须在[param0_0,peram0_1] x [param1_0,param1_2] x ...)中返回值,那么您可以使用范围树结构来提高效率。