User Tools

Site Tools


programming:cpp:container

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
programming:cpp:container [2022/05/06 17:13]
odagawa
programming:cpp:container [2022/05/06 17:25] (current)
odagawa
Line 16: Line 16:
  
 <code cpp> <code cpp>
 +#include <iostream>
 #include <vector> #include <vector>
  
Line 213: Line 214:
 それぞれの関数のオーバーロードの仕方は[[programming:cpp:class|ここ]]を参照. それぞれの関数のオーバーロードの仕方は[[programming:cpp:class|ここ]]を参照.
  
 +<code cpp>
 +#include <iostream>
 +#include <vector>
 +#include <utility>
 +
 +#include <boost/unordered_map.hpp>
 +
 +int main (int argc, char *argv[]) {
 +
 +  // linklet の実装.
 +  // ただし実は MC の解析であれば unordered である必要はなかった.
 +  boost::unordered_multimap<int, int > linklet;
 +  
 +  std::vector<std::pair<int, int > > linklets;
 +  for ( auto ilinklet : linklets ) {
 +    if ( ilinklet.first > ilinklet.second )
 +      std::swap(ilinklet.first, ilinklet.second);
 +    linklet.insert(std::make_pair(linilet.first, linklet.second));
 +  }
 +  // これで上流の basetrack を基準につながる下流の basetrack を高速で探索することが可能となった.
 +  // ただし,実際には int ではなく,plate などで大小関係が決まった構造体を詰めている
 +  
 +  // ある basetrack からつながるすべての basetrack を列挙する.
 +  int target = 100;
 +  if ( linklet.find(target) != linklet.end() ) {
 +    auto range = linklet.equal_range(target);
 +    for ( auto itr = range.first; itr != range.second; itr++ ) {
 +      std::cout << (*itr).second << std::endl;
 +    }
 +  }
 +
 +  std::exit(0);
 +
 +}
 +
 +</code>
programming/cpp/container.1651857222.txt.gz · Last modified: 2022/05/06 17:13 by odagawa