gpt4 book ai didi

c++ - 具有 OR 搜索功能的多键容器

转载 作者:行者123 更新时间:2023-11-30 02:44:51 24 4
gpt4 key购买 nike

我正在寻找一个可以容纳多个键的容器,如果我为其中一个键值输入保留值(例如 0),它会被视为“或”搜索。

map< pair<int, int>, 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<int, int> key1 = make_pair(1, 1);
pair<int, int> key2 = make_pair(3, 0);
pair<int, int> key3 = make_pair(0, 1);
pair<int, int> 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 <boost/multi_index_container.hpp>
#include <boost/multi_index/ordered_index.hpp>
#include <boost/multi_index/composite_key.hpp>
#include <boost/multi_index/member.hpp>
#include <boost/range/any_range.hpp>
#include <iostream>

using namespace boost::multi_index;

struct element{int k1,k2,data;};

typedef multi_index_container<
element,
indexed_by<
ordered_unique<
composite_key<
element,
member<element,int,&element::k1>,
member<element,int,&element::k2>
>
>,
ordered_non_unique<member<element,int,&element::k2>>
>
> 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<int,int>& 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<<e.data<<",";
}
return os;
}

int main()
{
multi_t m={{1,1,650},{2,4,827},{3,1,5},{3,2,943254}};
std::cout<<range(m,{1,1})<<"\n";
std::cout<<range(m,{3,0})<<"\n";
std::cout<<range(m,{0,1})<<"\n";
std::cout<<range(m,{0,0})<<"\n";
}

关于c++ - 具有 OR 搜索功能的多键容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25065229/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com