在两个向量中的元素之间创建链接

时间:2013-06-11 21:23:41

标签: c++ design-patterns data-structures

我打算建立链接来识别两个向量的关联。 我们假设我们有两个向量:

vector1 <seg1, seg2, seg3>
vector2 <pic1, pic2, pic3,pic4>

假设关联如下:

seg1->(pic1, pic2) seg2->(pic1,pic2) seg3->pic3 //from vector1 side
pic1->(seg1, seg2) pic2->(seg1,seg2) pic3->seg3 pic4->nothing //from vector2 side

我想要的是知道哪个seg与pics的哪个indexNums相关联,并且pics相同。我只关注两个向量中的位置编号,我不关心这两个向量的元素内容是什么。我所做的是设计一个结构:

Struct 
{
  int indexNum;
  Bool type; //seg or pic
  addlink(indexNum); //add a link to another Struct, and the type should be opposite.
  removelink(indexNum); //remove a link from a given indexNum
  getLinks();  //return all of links, the return should be vector<Struct*>? 
}

我认为它并不好,而且对于协会也不清楚。是否有更好的方法为这两个向量建立链接?

3 个答案:

答案 0 :(得分:1)

Boost.Bimap旨在解决此类问题。

答案 1 :(得分:0)

我想知道multimap是否适合你?

http://www.cplusplus.com/reference/map/multimap/

答案 2 :(得分:0)

#include <iostream>
#include <boost/bimap.hpp>
#include <boost/bimap/set_of.hpp>
#include <boost/bimap/multiset_of.hpp>

namespace bimaps = boost::bimaps;

int main()
{
   typedef boost::bimap<bimaps::multiset_of<int>, bimaps::set_of<int>> bimap_t;
   typedef bimap_t::value_type value_type;
   bimap_t bimap;
   bimap.insert(value_type(1, 1));
   bimap.insert(value_type(1, 2));
   auto& left = bimap.left;
   auto it = left.find(1);
   std::cout << "LEFT" << std::endl;
   for (; it != left.end(); ++it)
   {
      std::cout << it->first <<  " " << it->second << std::endl;
   }
   auto& right = bimap.right;
   auto r_it = right.find(2);
   std::cout << "RIGHT" << std::endl;
   for (; r_it != right.end(); ++r_it)
   {
      std::cout << r_it->first << " " << r_it->second << std::endl;
   }
}

http://liveworkspace.org/code/e766b134d9e96b9192424ac9325ae59c