gpt4 book ai didi

c++ - boost interval_map 是否有 operator [] 或 .at() 方法?

转载 作者:可可西里 更新时间:2023-11-01 16:36:24 30 4
gpt4 key购买 nike

我正在使用 BOOST 库中的 interval_map

typedef set<int> Tpopulations;    
interval_map<int, Tpopulations> populations;

假设我在人群中有这个

[1006311,1006353)   1611,1653,
[1006353,1006432) 1031,1611,1653,
[1006432,1006469] 1031,1387,1523,1611,1653,
(1006469,1006484] 1031,1387,1611,1653,
(1006484,1006496] 1031,1387,1611,
(1006496,1006506] 1031,1611,
(1006506,1006547] 1031,

现在我想找出映射到某个数字上的内容:我希望是这样的:

cout << populations[1006313];  // 1611,1653

cout << populations.at(1006313);  // 1611,1653

不过我好像没有找到这样的方法。

我真的需要将另一个区间图定义为“窗口”并进行交集吗?像这样的东西:

interval_map<int, Tpopulations> window;
set<int>empty_set;
window +=(make_pair(1006313,empty_set));
cout << populations & window

最佳答案

不,boost::icl::interval_map不包含这些元素访问函数。但是你可以做你想做的,使用 find 功能。

typedef std::set<int> Tpopulations;
typedef boost::icl::interval_map<int, Tpopulations> IMap;
typedef boost::icl::interval<int> Interval;
...
IMap m;
m += std::make_pair(Interval::right_open(1006311, 1006353), Tpopulations({1611, 1653}));
...
IMap::const_iterator it = m.find(1006313);
cout << it->first << endl;
...

上面的代码会给你间隔,其中包含数字 1006313。为了发送 std::set<int>cout你需要额外的运算符(operator):

inline std::ostream& operator<< (std::ostream& S, const Tpopulations& X)
{
S << '(';
for (ISet::const_iterator it = X.cbegin(); it != X.cend(); ++it)
{
if (it != X.cbegin()) S << ',';
S << *it;
}
S << ')';
return S;
}

然后下面一行会打印出你想要的:

cout << it->second << endl;

关于c++ - boost interval_map 是否有 operator [] 或 .at() 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19192936/

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