我打算建立链接来识别两个向量的关联。 我们假设我们有两个向量:
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*>?
}
我认为它并不好,而且对于协会也不清楚。是否有更好的方法为这两个向量建立链接?
答案 0 :(得分:1)
Boost.Bimap旨在解决此类问题。
答案 1 :(得分:0)
我想知道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