我目前正在使用 Boost 的多索引来帮助跟踪数据包通过系统的次数。每次系统接触数据包时,它的 IP 地址都会添加到一个字符串中,以逗号分隔。然后我遍历该字符串,对其进行标记并将找到的每个 IP 添加到多索引中。由于 IP 现在设置为唯一,因此不可能将同一 IP 两次添加到多索引中。 应该发生什么 然后是与 IP 地址关联的值应该增加,计算数据包通过同一个 IP 的次数。无论如何,我的问题出现在这里。当我使用 STL map 之类的东西时,我会得到一个响应,让我知道由于 map 中已经存在重复的键,所以无法添加键。 Boost 的多索引是否提供类似的功能?我知道如果我尝试插入相同的 IP 它将失败,但是我怎么知道它失败了?这是我当前代码的一部分:// Multi-index handlingusing boost::multi_index_container;using namespace boost::multi_index;struct pathlog{ string hop; int passedthru; pathlog(std::string hop_,int passedthru_):hop(hop_),passedthru(passedthru_){} friend std::ostream& operator<<(std::ostream& os,const pathlog& e) { os<<e.hop<<" "<<e.passedthru<<std::endl; return os; }};// structs for datastruct hop{};struct passedthru{};// multi-index container setuptypedef multi_index_container<pathlog,indexed_by<ordered_unique<tag<hop>, BOOST_MULTI_INDEX_MEMBER(pathlog,std::string,hop)>,ordered_non_unique<tag<passedthru>, BOOST_MULTI_INDEX_MEMBER(pathlog,int,passedthru)> >> pathlog_set;int disassemblepathlog(const string& str, pathlog_set& routecontainer, const string& delimiters = ","){ // Tokenizer (heavily modified) from http://oopweb.com/CPP/Documents/CPPHOWTO/Volume/C++Programming-HOWTO-7.html // Skip delimiters at beginning. string::size_type lastPos = str.find_first_not_of(delimiters, 0); // Find first "non-delimiter". string::size_type pos = str.find_first_of(delimiters, lastPos); while (string::npos != pos || string::npos != lastPos) { // Found a token, add it to the vector. routecontainer.insert(pathlog((str.substr(lastPos, pos - lastPos)),1)); // if this fails, I need to increment the counter! // Skip delimiters. Note the "not_of" lastPos = str.find_first_not_of(delimiters, pos); // Find next "non-delimiter" pos = str.find_first_of(delimiters, lastPos); }} 最佳答案 您对插入的调用返回一个 std::pair。只有在插入成功时 bool 才会为真。见 http://www.boost.org/doc/libs/1_43_0/libs/multi_index/doc/reference/ord_indices.html#modifiers关于c++ - 多索引插入失败返回(Boost),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3129409/
10-10 16:47