re PR libstdc++/54075 ([4.7.1] unordered_map insert still slower than 4.6.2)

2012-11-08  François Dumont  <fdumont@gcc.gnu.org>

	PR libstdc++/54075
	* include/bits/hashtable.h (_Hashtable<>::rehash): Reset hash
	policy state if no rehash.
	* testsuite/23_containers/unordered_set/modifiers/reserve.cc
	(test02): New.

From-SVN: r193335
This commit is contained in:
François Dumont 2012-11-08 20:06:00 +00:00
parent d553cd79e4
commit 52d25137ac
3 changed files with 31 additions and 0 deletions

View File

@ -1,3 +1,11 @@
2012-11-08 François Dumont <fdumont@gcc.gnu.org>
PR libstdc++/54075
* include/bits/hashtable.h (_Hashtable<>::rehash): Reset hash
policy state if no rehash.
* testsuite/23_containers/unordered_set/modifiers/reserve.cc
(test02): New.
2012-11-08 Jonathan Wakely <jwakely.gcc@gmail.com>
* include/profile/iterator_tracker.h (operator++): Fix returning

View File

@ -1597,6 +1597,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// level.
_M_rehash_policy._M_prev_resize = 0;
}
else
// No rehash, restore previous state to keep a consistent state.
_M_rehash_policy._M_reset(__saved_state);
}
template<typename _Key, typename _Value,

View File

@ -40,8 +40,28 @@ void test01()
}
}
void test02()
{
const int N = 1000;
typedef std::unordered_set<int> Set;
Set s;
s.reserve(N);
s.reserve(N);
std::size_t bkts = s.bucket_count();
for (int i = 0; i != N; ++i)
{
s.insert(i);
// As long as we insert less than the reserved number of elements we
// shouldn't experiment any rehash.
VERIFY( s.bucket_count() == bkts );
}
}
int main()
{
test01();
test02();
return 0;
}