indexed_invslice inventory::slice_filter_by_category(item_cat cat, const player &u)
{
    int i = 0;
    indexed_invslice stacks;
    for (invstack::iterator iter = items.begin(); iter != items.end(); ++iter) {
        if (has_category(iter->front(), cat, u)) {
            stacks.push_back(std::make_pair(&*iter, i));
        }
        ++i;
    }
    return stacks;
}
indexed_invslice inventory::slice_filter_by_category(item_cat cat, const player &u)
{
    int i = 0;
    indexed_invslice stacks;
    for( auto &elem : items ) {
        if( has_category( elem.front(), cat, u ) ) {
            stacks.push_back( std::make_pair( &elem, i ) );
        }
        ++i;
    }
    return stacks;
}