<div><div>typedef managed_shared_memory::allocator<char>::type char_allocator;</div><div>typedef basic_string<char, std::char_traits<char>, char_allocator>shm_string;</div><div><br></div><div>struct quote</div><div>{</div><div>public:</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>int market;</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>int kind;</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>shm_string seccode;</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>shm_string secname;</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>float price;</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>float zf;</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre"> </span>quote(int market_, int kind_, const char* seccode_, const char_allocator& a, const char* secname_, const char_allocator& b, float price_, float zf_):</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>market(market_),kind(kind_), seccode(seccode_, a), secname(secname_, b), price(price_), zf(zf_)</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>{}</div><div>};</div><div><br></div><div><br></div><div>typedef boost::multi_index::composite_key<quote, </div><div><span class="Apple-tab-span" style="white-space:pre"> </span>BOOST_MULTI_INDEX_MEMBER(quote, int, market),</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>BOOST_MULTI_INDEX_MEMBER(quote, shm_string, seccode)</div><div>>comp_key_search;</div><div>typedef boost::multi_index::composite_key_compare<</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>std::greater<int>,</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>std::greater<shm_string></div><div>>comp_key_compare_search;</div><div><br></div><div><br></div><div>typedef boost::multi_index::composite_key<quote, </div><div><span class="Apple-tab-span" style="white-space:pre"> </span>BOOST_MULTI_INDEX_MEMBER(quote, float, price),</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>BOOST_MULTI_INDEX_MEMBER(quote, int, market),</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>BOOST_MULTI_INDEX_MEMBER(quote, shm_string, seccode)</div><div>>comp_key_sortbyprice;</div><div>typedef boost::multi_index::composite_key_compare<</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>std::greater<float>,</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>std::greater<int>,</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>std::greater<shm_string></div><div>>comp_key_compare_sortbyprice;</div><div><br></div><div><br></div><div><br></div><div>typedef boost::multi_index::multi_index_container<</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>quote,</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>boost::multi_index::indexed_by<</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>boost::multi_index::ordered_non_unique<comp_key_search, comp_key_compare_search>,</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>boost::multi_index::ordered_non_unique<comp_key_sortbyprice, comp_key_compare_sortbyprice></div><div><span class="Apple-tab-span" style="white-space:pre"> </span>>,</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>managed_shared_memory::allocator<quote>::type</div><div>>quote_mic;</div><div><br></div><div><br></div><div>int main()</div><div>{</div><div>/*</div><div><span class="Apple-tab-span" style="white-space:pre"> </span> struct shm_remove</div><div> {</div><div> shm_remove() { shared_memory_object::remove("MySharedMemory"); }</div><div> ~shm_remove(){ shared_memory_object::remove("MySharedMemory"); }</div><div> } remover;</div><div>*/</div><div><span class="Apple-tab-span" style="white-space:pre"> </span> managed_shared_memory segment(open_only,"MySharedMemory");</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre"> </span>quote_mic *quotes = segment.find_or_construct<quote_mic></div><div> ("My MultiIndex Container") //Container's name in shared memory</div><div> ( quote_mic::ctor_args_list(),</div><div> //, segment.get_allocator<quote>()); //Ctor parameters</div><div><span class="Apple-tab-span" style="white-space:pre"> </span> quote_mic::allocator_type(segment.get_segment_manager()));</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre"> </span></div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre"> </span>quote_mic::nth_index<0>::type& idx_search = quotes->get<0>();</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>quote_mic::nth_index<1>::type& idx_sortbyprice = quotes->get<1>();</div><div><span class="Apple-tab-span" style="white-space:pre"> </span></div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre"> </span>int count = 0;</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>char_allocator ca1(segment.get_allocator<char>());</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre"> </span>// ��ѯ��Ʊʵʱ����</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>shm_string seccode("600000", ca1);</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>count = idx_search.count(boost::tuples::make_tuple(1, seccode));</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>quote_mic::nth_index<0>::type::iterator it = idx_search.find(boost::tuples::make_tuple(1, seccode));</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>for (int i=0; i<count; i++)</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>{</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>std::cout << it->seccode << std::endl;</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>it++;</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>}</div><div><br></div><div><br></div><div><br></div><div><br></div><div><font color="#ff0000"><span class="Apple-tab-span" style="white-space:pre"> </span>std::vector<quote> result;</font></div><div><span class="Apple-tab-span" style="white-space:pre"> </span>BOOST_FOREACH(const quote& q, idx_sortbyprice)</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>{</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>int kind = q.kind;</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>if (kind == 1 || kind == 11)</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>{</div><div>//<span class="Apple-tab-span" style="white-space:pre"> </span>std::cout << "�г�" << q.market << ",���" << q.kind << ", " << q.secname << ",���¼�" << q.price << std::endl;</div><div><br></div><div><font color="#ff0000"><span class="Apple-tab-span" style="white-space:pre"> </span>result.push_back(q); this statement will compile error, why? how to write?</font></div><div><span class="Apple-tab-span" style="white-space:pre"> </span>}</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>else</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>{</div><div>//<span class="Apple-tab-span" style="white-space: pre; "> </span>std::cout << "���ˣ��г�" << q.market << ",���" << q.kind << ", " << q.secname << ",���¼�" << q.price << std::endl;</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>}</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>}</div><div><br></div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre"> </span>return 0;</div><div>}</div></div><div><br></div>