On Thu, Aug 1, 2013 at 10:47 PM, Rory McCarthy < rorymccarthy77@googlemail.com> wrote:
In the following example is there a more efficient way to retrieve the unique keys of a non-unique index?
typedef multi_index_container< TaggedNodeEntry, indexed_by< hashed_non_unique< tag<name>, BOOST_MULTI_INDEX_MEMBER(**TaggedNodeEntry, int, name) >, ... >
TaggedNodes;
int main() { ... boost::multi_index::index<**TaggedNodes, name>::type::iterator ic0 = get<name>(taggedNodes).begin()**; boost::multi_index::index<**TaggedNodes, name>::type::iterator ic1 = get<name>(taggedNodes).end(); while (ic0 != ic1) { std::cout << ic0->name << std::endl; ic0 = get<name>(taggedNodes).equal_**range(ic0->name).second; }
Why not simply switch from hashed_non_unique to ordered_non_unique? That way you can full-scan that ordered index, and check yourself when the key changes, since you are guaranteed the entries will be clustered by the key, w/o resorting to equal_range() like for the hashed container. You lose a bit of speed for arbitrary lookups compared to the hashed index (not much I suspect), but should gain on getting the unique keys IMHO. --DD