key_type. Consider for instance the following code:
In previous versions of the library, thetypedef multi_index_container< std::string, indexed_by< ordered_unique<identity<std::string> > > > multi_t; ... multi_t m=...; m.find("boost"); // passed a const char*, not a std::string
findoperation generates several temporary
std::strings (one every time an internal comparison is made). In sufficiently advanced compilers, this is now avoided so that only one temporary is created.
std::tuples are available, these can be used for lookup operations in indices equipped with composite keys.
boost::tuples are also supported for backwards compatibility.
erase(iterator)member function of hashed indices used to have poor performance under low load conditions due to the requirement that an iterator to the next element must be returned (see ticket #4264). In accordance with the resolution of LWG issue #579, this problem has been fixed while maintaining the interface of
erase, at the expense of using one more word of memory per element. In fact, C++ complexity requirements on unordered associative containers have been improved for hashed indices so that
ndistis the number of non-equivalent elements in the index.
noexceptspecifications where appropriate (for compliant compilers).
multi_index_containeris now efficiently movable.
std::unique_ptr<T>) supported. This includes insertion of a range [
last) where the iterators point to a type that is convertible to that of the element: no copy construction happens in the process.
modify_keywith rollback in ordered and hashed indices when
Rollbackare different types (ticket #4130).
multi_index_containerserialization class version has been bumped from 1 to 2.
collection_size_typetype instead of the original
multi_index_containerserialization class version has been bumped from 0 to 1.
multi_index_container::multi_index_container(const allocator_type&)to mimic the equivalent interface in STL sequence containers.
global_funpredefined key extractor.
multi_index_containers placeable in shared memory.
modify_keywith rollback, as described in the tutorial.
cendand, when applicable,
crendmember functions, in accordance with the latest drafts of the next revision of the C++ standard.
lare of the same integral type, the iterator-based overloads of these member functions are avoided:
typedef multi_index_container< int,indexed_by<sequenced<> > > sequenced_container; std::list<int> l(...); sequenced_container c; // iterator-based overload of assign c.assign(l.begin(),l.end()); // The following is equivalent to // c.assign( // static_cast<sequenced_container::size_type>(10),100); // that is, "10" and "100" are not taken to be iterators as // in the previous expression. c.assign(10,100);
equal_rangehas been improved.
Tcan handle objects of types derived from or convertible to
T(and chained pointers to those). Previously, only objects of the exact type specified (along with
reference_wrappers and chained pointers to them) were accepted.
composite_key_compareand related classes accept operands not included in tuples as if they were passed in a tuple of length 1; this allows the user to omit tuple enclosing in lookup operations involving composite keys when only the first key is provided.
erase(first,last)now return an iterator to the element following those being deleted (previously nothing was returned), in accordance with the C++ Standard Library Defect Report 130 and issue 6.19 of TR1 Issues List.
clearmemfuns now perform faster.
Revised April 19th 2015
© Copyright 2003-2015 Joaquín M López Muñoz. Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)