1

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

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 与哪个 indexNums 图片相关联,对于图片也是如此。我只关注两个向量中的位置编号,并不关心这两个向量的元素内容是什么。我所做的是设计一个结构,如:

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*>? 
}

我觉得不好,对协会也不清楚。有没有更好的方法来为这两个向量建立链接?

4

3 回答 3

1

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

于 2013-06-11T21:30:16.147 回答
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

于 2013-06-12T07:23:10.730 回答
0

我想知道 multimap 是否对你来说是一个很好的解决方案

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

于 2013-06-11T21:28:18.767 回答