我正在寻找一个可以容纳多个键的容器,如果我为其中一个键值输入保留值(例如 0),它会被视为“或”搜索。
map< pair, int > myContainer;
myContainer.insert(make_pair(1, 1), 650);
myContainer.insert(make_pair(2, 4), 827);
myContainer.insert(make_pair(3, 1), 5);
myContainer.insert(make_pair(3, 2), 943254);
pair key1 = make_pair(1, 1);
pair key2 = make_pair(3, 0);
pair key3 = make_pair(0, 1);
pair key4 = make_pair(0, 0);
auto it = myContainer.find(key1);
cout << it->second << endl; // it->second is an array or vector or values
it = myContainer.find(key2);
cout << it->second << endl; // I know this isn't how to output all values in a vector
it = myContainer.find(key3);
cout << it->second << endl; // But this demonstrates the sort of thing I'm after
it = myContainer.find(key4);
cout << it->second << endl;
期望的输出:
650
5, 943254
650, 5
650, 827, 5, 943254
我正在处理与多种算法相互关联的各种数据。然而,每个算法拥有的信息不足以完全正确地定义所有 key 以收集每个单独的信息包。在稍后阶段,所有信息将被传递到一个更中央的数据库(可能使用 SQLite 或其他东西,现阶段不知道)。
我对大部分 C++ 还是比较陌生,目前对数据库一无所知。另一方面,我确实有一些时间来学习东西。很抱歉,如果这是一个模糊的问题,但由于有可能必须在卡片上学习至少一种新语言,我想我不妨问问一些指导!在此先感谢您提供的所有帮助。
目前正在使用:在 Windows 7 或 Ubuntu 12.04 上使用 C++ 的 Qt
Brandon 答案的变体:
#include
#include
#include
#include
#include
#include
using namespace boost::multi_index;
struct element{int k1,k2,data;};
typedef multi_index_container<
element,
indexed_by<
ordered_unique<
composite_key<
element,
member,
member
>
>,
ordered_non_unique<>>
>
> multi_t;
typedef boost::any_range<
element,
boost::bidirectional_traversal_tag,
const element&,
std::ptrdiff_t
> range_t;
inline range_t range(const multi_t& m,const std::pair& k)
{
if(k.second==0){
if(k.first==0){
return range_t(m.begin(),m.end());
}
else{
auto p=m.equal_range(k.first);
return range_t(p.first,p.second);
}
}
else if(k.first==0){
auto p=m.get<1>().equal_range(k.second);
return range_t(p.first,p.second);
}
else{
auto p=m.equal_range(boost::make_tuple(k.first,k.second));
return range_t(p.first,p.second);
}
}
inline std::ostream& operator<<(std::ostream& os,const range_t& r)
{
for(const auto& e:r){
os<<>
}
return os;
}
int main()
{
multi_t m={{1,1,650},{2,4,827},{3,1,5},{3,2,943254}};
std::cout<<>
std::cout<<>
std::cout<<>
std::cout<<>
}
Tôi là một lập trình viên xuất sắc, rất giỏi!