2013-06-11 78 views
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 

我要的是知道哪個賽格與圖片的其中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*>? 
} 

我認爲它不好,並且不清楚這個關聯。有沒有更好的方法來建立這兩個向量的鏈接?

回答

1

Boost.Bimap旨在解決這類問題。

+0

謝謝,我有我的情況下,使用bimap中的一個問題。如果我插入(seg3,pic3),這很酷,雙重搜索。但對於(seg2,)的情況,如何存儲它,我需要存儲(seg2,pic2),(seg2,pic3)?這是否合適?或者我錯過了什麼? –

+0

是否可以重複鍵?非常感謝! –

+0

@ CJAN.LEE:是的。請參閱[這裏](http://www.boost.org/doc/libs/1_42_0/libs/bimap/doc/html/boost_bimap/the_tutorial/discovering_the_bimap_framework.html#boost_bimap.the_tutorial.discovering_the_bimap_framework.interpreting_bidirectional_maps)。 –

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