Question: I have some data with a key associated with each data item. The key is made of two parts: let's call them color and id. I want to iterate the container by color to speed up rendering and I also want to find items in the container by id alone.

I tried using std::map for this with a key

```
class MyKey {
public:
  int color;
  int id;
  bool operator<(...)
  bool operator==(...)
};

```

But I cannot provide a < operator that would keep the data sorted by color and at the same time allow map::find to work on id alone (i.e. no information about color).

I want both the insert and find operations to be fast (e.g. O(log(n))).

Any ideas what kind of container I could use to implement this?

Answer: 
Adapt the example [here](http://www.boost.org/doc/libs/1_43_0/libs/multi_index/doc/tutorial/basics.html#multiple_sort) from Boost.Multi\_index based on the following modifications: 

```
typedef multi_index_container<
    MyKey,
    indexed_by<ordered_unique<identity<MyKey> >,
    ordered_non_unique<member<MyKey,int,&MyKey::color> >
  > 
> DataSet;

```
Try Boost.BiMap, it's a map with 2 views.

Otherwise there is the more complicated Boost.MultiIndex.