// std_map_key_string_demo.cpp: 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <string>
#include <unordered_map>
#include <map>
#include <type_traits>
#include <cassert>
struct hash_func
{
size_t operator()(const char *str) const
{
return std::_Hash_array_representation(str, 7);
}
};
struct stock_code_compare_unordered_map {
bool operator () (const char * _stk_code_1, const char * _stk_code_2) const {
return memcmp(_stk_code_1, _stk_code_2, 7) == 0;
}
};
void test_unordered_map() {
std::unordered_map<const char *, int, hash_func, stock_code_compare_unordered_map> m_stocks;
m_stocks["2000001"] = 2000001;
m_stocks["2300001"] = 2300001;
std::string str("2300001");
auto iter = m_stocks.find(str.c_str());
assert(iter->second == 2300001);
str = "2000001";
iter = m_stocks.find(str.c_str());
assert(iter->second == 2000001);
}
struct stock_code_compare_map {
bool operator () (const char * _stk_code_1, const char * _stk_code_2) const {
return memcmp(_stk_code_1, _stk_code_2, 7) < 0;
}
};
void test_map() {
std::map<const char *, int, stock_code_compare_map> m_stocks;
m_stocks["2000001"] = 2000001;
m_stocks["2300001"] = 2300001;
std::string str("2300001");
auto iter = m_stocks.find(str.c_str());
assert(iter->second == 2300001);
str = "2000001";
iter = m_stocks.find(str.c_str());
assert(iter->second == 2000001);
}
int main()
{
test_unordered_map();
test_map();
return 0;
}
//
#include "stdafx.h"
#include <string>
#include <unordered_map>
#include <map>
#include <type_traits>
#include <cassert>
struct hash_func
{
size_t operator()(const char *str) const
{
return std::_Hash_array_representation(str, 7);
}
};
struct stock_code_compare_unordered_map {
bool operator () (const char * _stk_code_1, const char * _stk_code_2) const {
return memcmp(_stk_code_1, _stk_code_2, 7) == 0;
}
};
void test_unordered_map() {
std::unordered_map<const char *, int, hash_func, stock_code_compare_unordered_map> m_stocks;
m_stocks["2000001"] = 2000001;
m_stocks["2300001"] = 2300001;
std::string str("2300001");
auto iter = m_stocks.find(str.c_str());
assert(iter->second == 2300001);
str = "2000001";
iter = m_stocks.find(str.c_str());
assert(iter->second == 2000001);
}
struct stock_code_compare_map {
bool operator () (const char * _stk_code_1, const char * _stk_code_2) const {
return memcmp(_stk_code_1, _stk_code_2, 7) < 0;
}
};
void test_map() {
std::map<const char *, int, stock_code_compare_map> m_stocks;
m_stocks["2000001"] = 2000001;
m_stocks["2300001"] = 2300001;
std::string str("2300001");
auto iter = m_stocks.find(str.c_str());
assert(iter->second == 2300001);
str = "2000001";
iter = m_stocks.find(str.c_str());
assert(iter->second == 2000001);
}
int main()
{
test_unordered_map();
test_map();
return 0;
}