我正在使用boost:multi_index_container。 以下是代碼如何添加在multi_index_container中指定的唯一索引
#include <string>
#include <boost/multi_index_container.hpp>
#include "boost/multi_index/global_fun.hpp"
#include "boost/multi_index/hashed_index.hpp"
#include <boost/multi_index/sequenced_index.hpp>
#include "boost/multi_index/mem_fun.hpp"
#include "boost/multi_index/member.hpp"
#include "boost/multi_index/ordered_index.hpp"
#include "boost/multi_index/indexed_by.hpp"
using namespace std;
class uri
{
public:
string str;
uri(string s) :str(s)
{
}
string getUri(){ return str; }
};
struct UriWithBase
{
UriWithBase(uri u1, uri u2) :link(u1), baseLink(u2){}
uri link;
uri baseLink;
};
int main()
{
typedef boost::multi_index::multi_index_container <
UriWithBase*,
boost::multi_index::indexed_by <
boost::multi_index::sequenced < >
>
> UriMultiIndex;
UriMultiIndex m_uris;
uri urib1("www.google.com");
uri uri1("www.news.google.com");
UriWithBase *ubptr = new UriWithBase(uri1, urib1);
m_uris.push_back(ubptr);
return 0;
}
現在我想添加一個有序的唯一索引指定的multi_index_container。此索引是針對容器中元素的唯一順序取決於「UriWithBase」類的第一個元素,即uri鏈接。 我試過但沒有工作。 的boost :: multi_index :: ordered_unique <
boost::multi_index::tag<uris_by_uri>,
BOOST_MULTI_INDEX_CONST_MEM_FUN(UriWithBasePtr, const uri&, (*(UriWithBasePtr)).link)>
感謝您詳細的解答,這將是在索引標識的變化如果我存儲共享「UriWithBase」類,而不是正常的指針的指針。共享指針聲明如下:typedef boost:shared_pt UriWithBasePtr; –
BSalunke
2015-03-26 09:51:11
@BSalunke,我認爲不應該是問題。只是將第三種情況的'UriWithBase *'替換爲'boost :: shared_ptr',代碼編譯時沒有錯誤。 –
megabyte1024
2015-03-26 10:00:13