我的multi_index_container
索引为composite_key
。
但我找不到用键擦除元素的方法。
请参阅以下内容:
#include <boost/multi_index_container.hpp>
#include <boost/multi_index/member.hpp>
#include <boost/multi_index/hashed_index.hpp>
#include <boost/multi_index/composite_key.hpp>
using namespace boost::multi_index;
struct Point
{
int x, y;
};
void func()
{
multi_index_container<Point,indexed_by<
hashed_unique<
composite_key<Point,
member<Point,int,&Point::x>,
member<Point,int,&Point::y> >
> > > points;
points.find( boost::make_tuple( 3, 3 ) ); // <- works
points.erase( boost::make_tuple( 3, 3 ) ); // <- failes to compile
}
erase(key)
适用于非复合索引。但我无法找到复合键的正确语法。
答案 0 :(得分:3)
erase
没有允许与元组互操作的重载类型(从技术上讲,这与compatible extensions的概念有关。)但是你可以用更多代码获得相同的效果:
auto p=points.equal_range(boost::make_tuple(3,3));
points.erase(p.first,p.second);
答案 1 :(得分:0)
根据您的要求添加到上一个答案。你可以这样:
Point p={3,3};
points.erase(points.key_extractor()(p));
唯一的问题是它不能扩展(如果Point
构建起来很昂贵。)