boost - 使用复合键从 multi_index_container 中删除每个键的元素

我有一个 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)适用于非复合索引。但我找不到复合键的正确语法。

最佳答案

erase没有允许与元组互操作的重载类型(从技术上讲,这与 compatible extensions 的概念有关。)但是您可以使用更多代码获得相同的效果:

auto p=points.equal_range(boost::make_tuple(3,3));
points.erase(p.first,p.second);

https://stackoverflow.com/questions/12579000/

相关文章:

c# - “does not contain a static '主要' method”错误

c# - 通用 - 编译器警告 CS0693 或错误

apache-kafka - Kafka + Zookeeper : Connection to n

objective-c - 架构armv7和Phonegap的 undefined symbol

c# - 排序列表>,错误: InvalidOperati

node.js - 编译 Node 给出 “No-old-style-declaration”标志错

android - 从现有代码创建新项目

c++ - C++模板泛型(模板参数列表)

asp.net-mvc - 访问asp.net mvc Controller ActionResul

compiler-errors - 为什么 'dsgaudiko'有效的PHP?