ForEverR से उत्तर आपके प्रश्न के पहले भाग के लिए आंशिक रूप से सही है (कैसे एक द्विदिश मल्टीमैप परिभाषित करने के लिए?)।
दूसरे भाग के लिए (एक दिशा में एक मानचित्र है जो एक दिशा में एक नक्शा है और दूसरी दिशा में एक मल्टीमैप है) यह सही नहीं है।
उपयोग करने के लिए एक सही तरीका [http://rextester.com/BXBDHN12336] होगा:
//bimap operations
#include <boost/bimap.hpp>
#include <boost/bimap/set_of.hpp>
#include <boost/bimap/multiset_of.hpp>
int main()
{
typedef boost::bimap<boost::bimaps::multiset_of<int>, boost::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(10, 50));
bimap.insert(value_type(1, 2));
bimap.insert(value_type(9, 15));
typedef bimap_t::left_const_iterator l_itr_t;
typedef std::pair<l_itr_t,l_itr_t> l_itr_range_t;
l_itr_range_t ii = bimap.left.equal_range(1);
std::cout << "LEFT" << std::endl;
for(l_itr_t it = ii.first; it != ii.second; ++it)
{
std::cout << "Key = " << it->first << " Value = " << it->second << std::endl;
}
std::cout << "RIGHT" << std::endl;
std::cout << "Key = " << 1 << " Value = " << bimap.right.at(1) << std::endl;
}
stdout:
LEFT
Key = 1 Value = 1
Key = 1 Value = 2
RIGHT
Key = 1 Value = 1
ForEverR से उदाहरण डाला डेटा के आदेश की वजह से काम लेकिन जब आप में एक और जोड़े को सम्मिलित परिणाम की जाँच करने के लिए 'लगता है' अंत bimap.insert (value_type (9, 15)) ;:
#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));
bimap.insert(value_type(9, 15));
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;
}
}
stdout:
LEFT
1 1
1 2
9 15
RIGHT
2 1
15 9
स्रोत
2013-04-13 14:59:11
मुझे यकीन नहीं है कि "काम करने के लिए आपका क्या मतलब है" के साथ आपका क्या मतलब है। आपके द्वारा प्राप्त किया जा रहा आउटपुट इसलिए है क्योंकि यह और r_it को मल्टीमैप के मध्य में कहीं भी() के साथ प्रारंभ किया जाता है। यदि शुरू() के साथ शुरू किया गया है, तो सभी तीन जोड़े ठीक से प्रिंट करते हैं। – namezero
हां, लेकिन यहां बिंदु तीन जोड़े मुद्रित नहीं है। बिंदु बिमाप (बाएं और/या दाएं से) तक पहुंचने और किसी दिए गए कुंजी के लिए जोड़े को पुनर्प्राप्त करना है। मैंने अपनी प्रतिक्रिया को एक उदाहरण सहित संपादित किया है जहां आप बराबर_रेेंज का उपयोग कर इसे पूरा कर सकते हैं। आशा है कि ये आपकी मदद करेगा। इस उत्तर को अद्यतन करने के लिए –
@JavierBravo kudos। हालांकि, वास्तव में आप पूरी तरह से साजिश को याद करते हैं: ** [लाइव ऑन कॉलिरू] (http://coliru.stacked-crooked.com/a/39ddf19cff3e97d8) ** – sehe