1

boost::multi_index を使用して URL 管理オブジェクトを作成しようとしています。2 つのインデックス、各パス項目の 1 つのインデックス位置、およびその項目を見つけるための 1 つのインデックス キーがあります。

class InternalPath
  {
  public:
    struct PathItem
    {
      int Position;
      std::string Key;
      std::string Path;
    };

    typedef boost::multi_index_container<
      PathItem,
      boost::multi_index::indexed_by<
        boost::multi_index::ordered_unique<boost::multi_index::member<PathItem,int,&PathItem::Position>>,
        boost::multi_index::ordered_unique<boost::multi_index::member<PathItem,std::string,&PathItem::Key>>
      >
    > PathContainer;

  private:
    PathContainer path_;
};

ただし、すべてのアイテムにキーがあるわけではないという問題があります。ほとんどの項目は、位置とパスのみで構成されます。キーを一意にしたい。キー以外のアイテムを複数挿入すると、問題が発生します。

空の文字列を持つキーがコンテナに複数のアイテムを持つことを許可することは可能ですか? そうでない場合、この問題を克服するにはどうすればよいですか?

4

2 に答える 2

1

簡単な答えは、それはできないということです。簡単な回避策として、キーが存在しない場合に一意の文字列を提供することを検討してください。たとえば、実際のキーとの衝突を防ぐ特殊文字の後に位置が続きます (一意であると想定されますよね?)。

struct PathItem
{
  PathItem(int p,const std::string& k,const std::string& pt):
    Position(p),Key(k),Path(pt){}

  PathItem(int p,const std::string& pt):
    Position(p),Key("!"),Path(pt){Key+=p;}

  int Position;
  std::string Key;
  std::string Path;
};
于 2013-06-03T08:10:07.940 に答える