Điều này thật lạ .. mã sau (mà tôi đã biên dịch nhờ Cassio Neri) được biên dịch mà không có bất kỳ lỗi nào .. bằng cách hashing_func hoặc key_equal_func được gọi (các cửa sổ không hiển thị trong cửa sổ bảng điều khiển)unordered_map với hàm băm/chức năng bằng nhau tùy chỉnh - không được gọi là
#include <iostream>
#include <string>
#include <unordered_map>
#include <algorithm>
#include <functional>
using namespace std;
unsigned long hashing_func(string key)
{
cout << "Hashing called";
unsigned long hash = 0;
for(int i=0; i<key.size(); i++)
{
hash += (71*hash + key[i]) % 5;
}
return hash;
}
template<class T> bool key_equal_fn(T t1, T t2)
{
return t1 == t2;
}
template <> bool key_equal_fn<string>(string t1, string t2)
{
cout << "Equal called";
return !(t1.compare(t2));
}
int main()
{
unordered_map<string, string>::size_type n = 5;
unordered_map<string, string> mymap(n, (const std::hash<string> &)hashing_func,
(const std::equal_to<string> &)(function<bool(string,string)>(key_equal_fn<string>))) ;
bool case_insensitive = mymap.key_eq()("test","TEST");
mymap["paul"] = "jenna";
mymap["frank"] = "ashley";
if(mymap["paul"] == mymap["frank"])
cout << "equal" << endl;
return 0;
}
Tôi đang sử dụng MSVC2012, bất kỳ gợi ý nào về vấn đề này có thể là gì?
Bạn vẫn đang phạm những sai lầm tương tự như trong câu hỏi khác. Hãy xem các giải pháp của tôi. http://stackoverflow.com/questions/15809087/unordered-map-constructor-error-equal-to-templated-function –