我使用multi_index_container来跟踪插入顺序并执行映射工作(如Java的LinkedMap)。如何更新boost multi_index_container的值?
#include <boost/multi_index_container.hpp>
#include <boost/multi_index/member.hpp>
#include <boost/multi_index/ordered_index.hpp>
#include <boost/multi_index/random_access_index.hpp>
#include "CppUnitTest.h"
using namespace Microsoft::VisualStudio::CppUnitTestFramework;
template<typename KeyType, typename MappedType>
struct LinkedMap {
typedef std::pair<KeyType, MappedType> value_type;
typedef boost::multi_index_container<
value_type,
boost::multi_index::indexed_by<
boost::multi_index::random_access<>,
boost::multi_index::ordered_unique<
boost::multi_index::member<value_type, KeyType, &value_type::first>
>
>
> type;
};
TEST_CLASS(LinkedMapTest) {
public:
TEST_METHOD(ShouldUpdateEntry) {
LinkedMap<int, std::wstring>::type userMap;
userMap.push_back(std::make_pair(1, L"John"));
userMap.push_back(std::make_pair(1, L"Tom")); // 2nd push_back
auto& idToNameMap = userMap.get<1>();
auto& iter = idToNameMap.find(1);
Assert::AreEqual(std::wstring(L"Tom"), iter->second);
}
};
测试用例失败。
结果消息:断言失败。预计:<汤姆>实际:<约翰>
这意味着第二个push_back不会更新值。
我的代码有什么问题?我怎么能实现一个LinkedMap?
我很乐意帮助你,但是你的MCVE并不完整。它没有包含头文件。 –
@RichardHodges更新。如果你不使用它,你可以删除CppUnitTestFramework。 – user1633272