-1

I have this multiindex defined which is taking huge memory due to large number of entries, I want to delete some entries from it on the basis of some decision checking, is that possible? how to achieve? I am doing as following, but getting crash in erase,stack trace attached

    typedef boost::multi_index::multi_index_container<
        Node,
        boost::multi_index::indexed_by<
            boost::multi_index::hashed_non_unique<
            boost::multi_index::tag<IndexByName>,
            boost::multi_index::member<
                Node, std::string, &Node::_name
            >
            >,
            boost::multi_index::hashed_unique<
                boost::multi_index::tag<IndexByObj>,
            boost::multi_index::const_mem_fun<
                Node, unsigned long long, &Node::key
            >
            >
        >
        > NameObjMultiIndex;

        typedef typename NameObjMultiIndex::template index<IndexByName>::type NameIndex;
        typedef typename NameObjMultiIndex::template index<IndexByObj>::type ObjIndex;
NameObjMultiIndex _cache;
std::unordered_map<N, bool>::type ChangeObjMap; // Templatised
ChangeObjMap _changeObjMap;

erase:

ObjIndex& objIndex = _cache.template get<IndexByObj>();
typename ChangeObjMap::iterator cit = _changeObjMap.begin();
cout<< "cache size before erase: " << _cache.size() << std::endl;
for(;cit != _changeObjMap.end();cit++)
{
    if(!cit->second){
        typename ObjIndex::iterator nit = objIndex.find((unsigned long long)cit->first.get());
        objIndex.erase((unsigned long long)cit->first.get());
        //if(nit != objIndex.end())
        //nameIndex.erase(nit->_name);
    }
}

stacktrace:

Thread 1 (Thread 0x2aaabe1bd8e0 (LWP 10598)):
#0  0x000000000a12994a in snps_boost_1_68_0::multi_index::detail::hashed_index_base_node_impl<std::allocator<char> >::prior() ()
#1  0x000000000a12ba51 in snps_boost_1_68_0::multi_index::detail::hashed_index_node_alg<snps_boost_1_68_0::multi_index::detail::hashed_index_node_impl<std::allocator<char> >, snps_boost_1_68_0::multi_index::detail::hashed_unique_tag>::is_last_of_bucket(snps_boost_1_68_0::multi_index::detail::hashed_index_node_impl<std::allocator<char> >*) ()
#2  0x000000000a13044f in void snps_boost_1_68_0::multi_index::detail::hashed_index_node_alg<snps_boost_1_68_0::multi_index::detail::hashed_index_node_impl<std::allocator<char> >, snps_boost_1_68_0::multi_index::detail::hashed_unique_tag>::unlink<snps_boost_1_68_0::multi_index::detail::default_assigner>(snps_boost_1_68_0::multi_index::detail::hashed_index_node_impl<std::allocator<char> >*, snps_boost_1_68_0::multi_index::detail::default_assigner&) ()
#3  0x000000000a12f589 in snps_boost_1_68_0::multi_index::detail::hashed_index_node_alg<snps_boost_1_68_0::multi_index::detail::hashed_index_node_impl<std::allocator<char> >, snps_boost_1_68_0::multi_index::detail::hashed_unique_tag>::unlink(snps_boost_1_68_0::multi_index::detail::hashed_index_node_impl<std::allocator<char> >*) ()
#4  0x000000000a56d2cc in snps_boost_1_68_0::multi_index::detail::hashed_index<snps_boost_1_68_0::multi_index::const_mem_fun<Monet::MdmNameCacheImplMIWithStripEscape<Monet::MdmIndexWrapper<Monet::MdmPort> >::Node, unsigned long long, &(Monet::MdmNameCacheImplMIWithStripEscape<Monet::MdmIndexWrapper<Monet::MdmPort> >::Node::key() const)>, snps_boost_1_68_0::hash<unsigned long long>, std::equal_to<unsigned long long>, snps_boost_1_68_0::multi_index::detail::nth_layer<2, Monet::MdmNameCacheImplMIWithStripEscape<Monet::MdmIndexWrapper<Monet::MdmPort> >::Node, snps_boost_1_68_0::multi_index::indexed_by<snps_boost_1_68_0::multi_index::hashed_non_unique<snps_boost_1_68_0::multi_index::tag<Monet::MdmNameCacheImplMIWithStripEscape<Monet::MdmIndexWrapper<Monet::MdmPort> >::IndexByName, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na>, Monet::MdmNameCacheImplMIWithStripEscape<Monet::MdmIndexWrapper<Monet::MdmPort> >::strip_escape_name_extractor, mpl_::na, mpl_::na>, snps_boost_1_68_0::multi_index::hashed_unique<snps_boost_1_68_0::multi_index::tag<Monet::MdmNameCacheImplMIWithStripEscape<Monet::MdmIndexWrapper<Monet::MdmPort> >::IndexByObj, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na>, snps_boost_1_68_0::multi_index::const_mem_fun<Monet::MdmNameCacheImplMIWithStripEscape<Monet::MdmIndexWrapper<Monet::MdmPort> >::Node, unsigned long long, &(Monet::MdmNameCacheImplMIWithStripEscape<Monet::MdmIndexWrapper<Monet::MdmPort> >::Node::key() const)>, mpl_::na, mpl_::na>, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na>, std::allocator<Monet::MdmNameCacheImplMIWithStripEscape<Monet::MdmIndexWrapper<Monet::MdmPort> >::Node> >, snps_boost_1_68_0::mpl::v_item<Monet::MdmNameCacheImplMIWithStripEscape<Monet::MdmIndexWrapper<Monet::MdmPort> >::IndexByObj, snps_boost_1_68_0::mpl::vector0<mpl_::na>, 0>, snps_boost_1_68_0::multi_index::detail::hashed_unique_tag>::unlink(snps_boost_1_68_0::multi_index::detail::hashed_index_node<snps_boost_1_68_0::multi_index::detail::index_node_base<Monet::MdmNameCacheImplMIWithStripEscape<Monet::MdmIndexWrapper<Monet::MdmPort> >::Node, std::allocator<Monet::MdmNameCacheImplMIWithStripEscape<Monet::MdmIndexWrapper<Monet::MdmPort> >::Node> >, snps_boost_1_68_0::multi_index::detail::hashed_unique_tag>*) ()
#5  0x000000000a565c9d in snps_boost_1_68_0::multi_index::detail::hashed_index<snps_boost_1_68_0::multi_index::const_mem_fun<Monet::MdmNameCacheImplMIWithStripEscape<Monet::MdmIndexWrapper<Monet::MdmPort> >::Node, unsigned long long, &(Monet::MdmNameCacheImplMIWithStripEscape<Monet::MdmIndexWrapper<Monet::MdmPort> >::Node::key() const)>, snps_boost_1_68_0::hash<unsigned long long>, std::equal_to<unsigned long long>, snps_boost_1_68_0::multi_index::detail::nth_layer<2, Monet::MdmNameCacheImplMIWithStripEscape<Monet::MdmIndexWrapper<Monet::MdmPort> >::Node, snps_boost_1_68_0::multi_index::indexed_by<snps_boost_1_68_0::multi_index::hashed_non_unique<snps_boost_1_68_0::multi_index::tag<Monet::MdmNameCacheImplMIWithStripEscape<Monet::MdmIndexWrapper<Monet::MdmPort> >::IndexByName, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na>, Monet::MdmNameCacheImplMIWithStripEscape<Monet::MdmIndexWrapper<Monet::MdmPort> >::strip_escape_name_extractor, mpl_::na, mpl_::na>, snps_boost_1_68_0::multi_index::hashed_unique<snps_boost_1_68_0::multi_index::tag<Monet::MdmNameCacheImplMIWithStripEscape<Monet::MdmIndexWrapper<Monet::MdmPort> >::IndexByObj, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na>, snps_boost_1_68_0::multi_index::const_mem_fun<Monet::MdmNameCacheImplMIWithStripEscape<Monet::MdmIndexWrapper<Monet::MdmPort> >::Node, unsigned long long, &(Monet::MdmNameCacheImplMIWithStripEscape<Monet::MdmIndexWrapper<Monet::MdmPort> >::Node::key() const)>, mpl_::na, mpl_::na>, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na>, std::allocator<Monet::MdmNameCacheImplMIWithStripEscape<Monet::MdmIndexWrapper<Monet::MdmPort> >::Node> >, snps_boost_1_68_0::mpl::v_item<Monet::MdmNameCacheImplMIWithStripEscape<Monet::MdmIndexWrapper<Monet::MdmPort> >::IndexByObj, snps_boost_1_68_0::mpl::vector0<mpl_::na>, 0>, snps_boost_1_68_0::multi_index::detail::hashed_unique_tag>::erase_(snps_boost_1_68_0::multi_index::detail::hashed_index_node<snps_boost_1_68_0::multi_index::detail::index_node_base<Monet::MdmNameCacheImplMIWithStripEscape<Monet::MdmIndexWrapper<Monet::MdmPort> >::Node, std::allocator<Monet::MdmNameCacheImplMIWithStripEscape<Monet::MdmIndexWrapper<Monet::MdmPort> >::Node> >, snps_boost_1_68_0::multi_index::detail::hashed_unique_tag>*) ()
#6  0x000000000a55d734 in snps_boost_1_68_0::multi_index::detail::hashed_index<Monet::MdmNameCacheImplMIWithStripEscape<Monet::MdmIndexWrapper<Monet::MdmPort> >::strip_escape_name_extractor, snps_boost_1_68_0::hash<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::equal_to<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, snps_boost_1_68_0::multi_index::detail::nth_layer<1, Monet::MdmNameCacheImplMIWithStripEscape<Monet::MdmIndexWrapper<Monet::MdmPort> >::Node, snps_boost_1_68_0::multi_index::indexed_by<snps_boost_1_68_0::multi_index::hashed_non_unique<snps_boost_1_68_0::multi_index::tag<Monet::MdmNameCacheImplMIWithStripEscape<Monet::MdmIndexWrapper<Monet::MdmPort> >::IndexByName, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na>, Monet::MdmNameCacheImplMIWithStripEscape<Monet::MdmIndexWrapper<Monet::MdmPort> >::strip_escape_name_extractor, mpl_::na, mpl_::na>, snps_boost_1_68_0::multi_index::hashed_unique<snps_boost_1_68_0::multi_index::tag<Monet::MdmNameCacheImplMIWithStripEscape<Monet::MdmIndexWrapper<Monet::MdmPort> >::IndexByObj, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na>, snps_boost_1_68_0::multi_index::const_mem_fun<Monet::MdmNameCacheImplMIWithStripEscape<Monet::MdmIndexWrapper<Monet::MdmPort> >::Node, unsigned long long, &(Monet::MdmNameCacheImplMIWithStripEscape<Monet::MdmIndexWrapper<Monet::MdmPort> >::Node::key() const)>, mpl_::na, mpl_::na>, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na>, std::allocator<Monet::MdmNameCacheImplMIWithStripEscape<Monet::MdmIndexWrapper<Monet::MdmPort> >::Node> >, snps_boost_1_68_0::mpl::v_item<Monet::MdmNameCacheImplMIWithStripEscape<Monet::MdmIndexWrapper<Monet::MdmPort> >::IndexByName, snps_boost_1_68_0::mpl::vector0<mpl_::na>, 0>, snps_boost_1_68_0::multi_index::detail::hashed_non_unique_tag>::erase_(snps_boost_1_68_0::multi_index::detail::hashed_index_node<snps_boost_1_68_0::multi_index::detail::hashed_index_node<snps_boost_1_68_0::multi_index::detail::index_node_base<Monet::MdmNameCacheImplMIWithStripEscape<Monet::MdmIndexWrapper<Monet::MdmPort> >::Node, std::allocator<Monet::MdmNameCacheImplMIWithStripEscape<Monet::MdmIndexWrapper<Monet::MdmPort> >::Node> >, snps_boost_1_68_0::multi_index::detail::hashed_unique_tag>, snps_boost_1_68_0::multi_index::detail::hashed_non_unique_tag>*) ()
#7  0x000000000a551213 in snps_boost_1_68_0::multi_index::multi_index_container<Monet::MdmNameCacheImplMIWithStripEscape<Monet::MdmIndexWrapper<Monet::MdmPort> >::Node, snps_boost_1_68_0::multi_index::indexed_by<snps_boost_1_68_0::multi_index::hashed_non_unique<snps_boost_1_68_0::multi_index::tag<Monet::MdmNameCacheImplMIWithStripEscape<Monet::MdmIndexWrapper<Monet::MdmPort> >::IndexByName, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na>, Monet::MdmNameCacheImplMIWithStripEscape<Monet::MdmIndexWrapper<Monet::MdmPort> >::strip_escape_name_extractor, mpl_::na, mpl_::na>, snps_boost_1_68_0::multi_index::hashed_unique<snps_boost_1_68_0::multi_index::tag<Monet::MdmNameCacheImplMIWithStripEscape<Monet::MdmIndexWrapper<Monet::MdmPort> >::IndexByObj, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na>, snps_boost_1_68_0::multi_index::const_mem_fun<Monet::MdmNameCacheImplMIWithStripEscape<Monet::MdmIndexWrapper<Monet::MdmPort> >::Node, unsigned long long, &(Monet::MdmNameCacheImplMIWithStripEscape<Monet::MdmIndexWrapper<Monet::MdmPort> >::Node::key() const)>, mpl_::na, mpl_::na>, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na>, std::allocator<Monet::MdmNameCacheImplMIWithStripEscape<Monet::MdmIndexWrapper<Monet::MdmPort> >::Node> >::erase_(snps_boost_1_68_0::multi_index::detail::hashed_index_node<snps_boost_1_68_0::multi_index::detail::hashed_index_node<snps_boost_1_68_0::multi_index::detail::index_node_base<Monet::MdmNameCacheImplMIWithStripEscape<Monet::MdmIndexWrapper<Monet::MdmPort> >::Node, std::allocator<Monet::MdmNameCacheImplMIWithStripEscape<Monet::MdmIndexWrapper<Monet::MdmPort> >::Node> >, snps_boost_1_68_0::multi_index::detail::hashed_unique_tag>, snps_boost_1_68_0::multi_index::detail::hashed_non_unique_tag>*) ()
#8  0x000000000a5448d2 in snps_boost_1_68_0::multi_index::detail::index_base<Monet::MdmNameCacheImplMIWithStripEscape<Monet::MdmIndexWrapper<Monet::MdmPort> >::Node, snps_boost_1_68_0::multi_index::indexed_by<snps_boost_1_68_0::multi_index::hashed_non_unique<snps_boost_1_68_0::multi_index::tag<Monet::MdmNameCacheImplMIWithStripEscape<Monet::MdmIndexWrapper<Monet::MdmPort> >::IndexByName, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na>, Monet::MdmNameCacheImplMIWithStripEscape<Monet::MdmIndexWrapper<Monet::MdmPort> >::strip_escape_name_extractor, mpl_::na, mpl_::na>, snps_boost_1_68_0::multi_index::hashed_unique<snps_boost_1_68_0::multi_index::tag<Monet::MdmNameCacheImplMIWithStripEscape<Monet::MdmIndexWrapper<Monet::MdmPort> >::IndexByObj, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na>, snps_boost_1_68_0::multi_index::const_mem_fun<Monet::MdmNameCacheImplMIWithStripEscape<Monet::MdmIndexWrapper<Monet::MdmPort> >::Node, unsigned long long, &(Monet::MdmNameCacheImplMIWithStripEscape<Monet::MdmIndexWrapper<Monet::MdmPort> >::Node::key() const)>, mpl_::na, mpl_::na>, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na>, std::allocator<Monet::MdmNameCacheImplMIWithStripEscape<Monet::MdmIndexWrapper<Monet::MdmPort> >::Node> >::final_erase_(snps_boost_1_68_0::multi_index::detail::hashed_index_node<snps_boost_1_68_0::multi_index::detail::hashed_index_node<snps_boost_1_68_0::multi_index::detail::index_node_base<Monet::MdmNameCacheImplMIWithStripEscape<Monet::MdmIndexWrapper<Monet::MdmPort> >::Node, std::allocator<Monet::MdmNameCacheImplMIWithStripEscape<Monet::MdmIndexWrapper<Monet::MdmPort> >::Node> >, snps_boost_1_68_0::multi_index::detail::hashed_unique_tag>, snps_boost_1_68_0::multi_index::detail::hashed_non_unique_tag>*) ()
#9  0x000000000a53be45 in snps_boost_1_68_0::multi_index::detail::hashed_index<snps_boost_1_68_0::multi_index::const_mem_fun<Monet::MdmNameCacheImplMIWithStripEscape<Monet::MdmIndexWrapper<Monet::MdmPort> >::Node, unsigned long long, &(Monet::MdmNameCacheImplMIWithStripEscape<Monet::MdmIndexWrapper<Monet::MdmPort> >::Node::key() const)>, snps_boost_1_68_0::hash<unsigned long long>, std::equal_to<unsigned long long>, snps_boost_1_68_0::multi_index::detail::nth_layer<2, Monet::MdmNameCacheImplMIWithStripEscape<Monet::MdmIndexWrapper<Monet::MdmPort> >::Node, snps_boost_1_68_0::multi_index::indexed_by<snps_boost_1_68_0::multi_index::hashed_non_unique<snps_boost_1_68_0::multi_index::tag<Monet::MdmNameCacheImplMIWithStripEscape<Monet::MdmIndexWrapper<Monet::MdmPort> >::IndexByName, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na>, Monet::MdmNameCacheImplMIWithStripEscape<Monet::MdmIndexWrapper<Monet::MdmPort> >::strip_escape_name_extractor, mpl_::na, mpl_::na>, snps_boost_1_68_0::multi_index::hashed_unique<snps_boost_1_68_0::multi_index::tag<Monet::MdmNameCacheImplMIWithStripEscape<Monet::MdmIndexWrapper<Monet::MdmPort> >::IndexByObj, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na>, snps_boost_1_68_0::multi_index::const_mem_fun<Monet::MdmNameCacheImplMIWithStripEscape<Monet::MdmIndexWrapper<Monet::MdmPort> >::Node, unsigned long long, &(Monet::MdmNameCacheImplMIWithStripEscape<Monet::MdmIndexWrapper<Monet::MdmPort> >::Node::key() const)>, mpl_::na, mpl_::na>, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na>, std::allocator<Monet::MdmNameCacheImplMIWithStripEscape<Monet::MdmIndexWrapper<Monet::MdmPort> >::Node> >, snps_boost_1_68_0::mpl::v_item<Monet::MdmNameCacheImplMIWithStripEscape<Monet::MdmIndexWrapper<Monet::MdmPort> >::IndexByObj, snps_boost_1_68_0::mpl::vector0<mpl_::na>, 0>, snps_boost_1_68_0::multi_index::detail::hashed_unique_tag>::erase(snps_boost_1_68_0::multi_index::detail::hashed_index_iterator<snps_boost_1_68_0::multi_index::detail::hashed_index_node<snps_boost_1_68_0::multi_index::detail::index_node_base<Monet::MdmNameCacheImplMIWithStripEscape<Monet::MdmIndexWrapper<Monet::MdmPort> >::Node, std::allocator<Monet::MdmNameCacheImplMIWithStripEscape<Monet::MdmIndexWrapper<Monet::MdmPort> >::Node> >, snps_boost_1_68_0::multi_index::detail::hashed_unique_tag>, snps_boost_1_68_0::multi_index::detail::bucket_array<std::allocator<Monet::MdmNameCacheImplMIWithStripEscape<Monet::MdmIndexWrapper<Monet::MdmPort> >::Node> >, snps_boost_1_68_0::multi_index::detail::hashed_index_global_iterator_tag>) ()
Hemant Kr
  • 61
  • 6
  • Could you please suggest @joaquín-m-lópez-muñoz – Hemant Kr Jan 04 '20 at 12:51
  • It would take a bit more context to see what is going on. Please declare your variables before using them. (What is `_cache`? `_changeObjMap`?) – JaMiT Jan 04 '20 at 21:23
  • @JaMiT _cache is multiindex container i.e. NameObjMultiIndex _cache I want to erase some elements to reduce the malloc memory taken by container, so,If I erase from one index, does it get erased from second index as well? Moreover,I am getting crash while erasing , see the code – Hemant Kr Jan 05 '20 at 00:14
  • I see the code you posted, and it uses variables that have not been declared. So it's of no use to me. **Please declare your variables before using them.** – JaMiT Jan 05 '20 at 04:37
  • @JaMiT updated variables – Hemant Kr Jan 05 '20 at 08:42
  • You still have something undeclared: the `N` in the definition of the type `ChangeObjMap`. Presumably this `N` is what links the map to your multi-index container, so its definition seems to be highly relevant. – JaMiT Jan 05 '20 at 23:00
  • @JaMiT N is template class type which is same as objetct index of multiindex – Hemant Kr Jan 06 '20 at 06:16
  • This piecemeal approach is producing too much back-and-forth. So I'll switch to another appraoch. Please see [mre] and update your example to something that is complete enough to be compiled (but without adding more than is necessary). – JaMiT Jan 09 '20 at 03:01

1 Answers1

0

As for the subject question of your post:

Does erasing an element from one index deletes corresponding entry from second index boost::multi_index[?]

The answer is:

Yes. Erasing an element in a multi_index_container, no matter the index through which you erase, results in the element disappearing simultaneously from all indices.

Now, the body of your post goes on to incompletely describe a situation where, summarizing:

  • You have a _changeObjMap map that stores keys to Node elements of a separate multi_index_container named _cache.
  • The code traverses _changeObjMap and calls _cache.get<IndexByObj>().erase(k) for some of the ks met during _changeObjMap traversal.

My comments on the body of your post:

  • I don't see how the code is related to the subject question.
  • What you're trying to do –erasing elements of a multi_index_container based on keys stored somewhere else– seems in principle OK.
  • The reasons why your code is crashing can't be deduced from the incomplete, incompilable snippet you posted. I suggest you provide a MCVE. One particular bit that has caught my attention is the definition of ChangeObjMap as some std::unordered_map<N, bool>::type: std::unordered_map does not have a nested type typedef, so I'm pretty sure you're not copy&pasting from real code.
Joaquín M López Muñoz
  • 5,243
  • 1
  • 15
  • 20
  • As to how code is related to the subject, I am not able to see all the malloc memory that got allocated in population of multiindex, getting returned to OS , I thought it might be just because I am deleting from only one index. ChangeObjMap is having key of type same as one of multiindex container's index i.e.IndexByObj.Depending on that, I am erasing some elements from multiindex. Code is not crashing with small testcase that I have, but running on large testcase, getting crash in erase as per stacktrace attached – Hemant Kr Jan 05 '20 at 20:06
  • Your post deals with two unrelated issues: memory not being returned to OS (which has nothing to do with `multi_index_container` indices) and crashing on `erase`, which, probably, has nothing to do with `erase` itself but it's due to some illegal previous manipulation of the container and/or its elements. I suggest you split the thing into two separate questions, each with its own MCVE. – Joaquín M López Muñoz Jan 06 '20 at 10:31
  • Lets's leave crash aside, I want to know will erasing some elements from container reduce the malloc memory used? Is rehash helpful in this case? – Hemant Kr Jan 06 '20 at 10:39
  • https://stackoverflow.com/questions/45538993/why-dont-memory-allocators-actively-return-freed-memory-to-the-os – Joaquín M López Muñoz Jan 06 '20 at 11:50