C++ 如何重新编写模板函数来处理类型推断
因此,我对地图容器具有以下搜索功能:C++ 如何重新编写模板函数来处理类型推断,c++,templates,c++11,C++,Templates,C++11,因此,我对地图容器具有以下搜索功能: template <typename Key, typename T> void searchInMapByKey(std::map<Key,T> Map, T keyValue) { if(Map.empty()) { std::cout << "Map is empty, nothing to search for..." <<
template <typename Key, typename T>
void searchInMapByKey(std::map<Key,T> Map, T keyValue)
{
if(Map.empty())
{
std::cout << "Map is empty, nothing to search for..." << "\n";
}
else
{
for(const auto & element : Map)
{
if(element.first==keyValue)
{
std::cout << keyValue << "matches a key value " << " in the map" << "\n";
}
}
}
}
模板
void searchInMapByKey(标准::映射映射,T键值)
{
if(Map.empty())
{
std::cout您正在使用map
的mapped\u type
,T
作为键值,您应该使用key\u type
,因此将函数声明更改为:
template <typename Key, typename T>
void searchInMapByKey(std::map<Key,T> Map, Key keyValue)
模板
void searchInMapByKey(标准::映射映射,键值)
您正在使用map
的mapped\u type
,T
作为键值,您应该使用key\u type
,因此将函数声明更改为:
template <typename Key, typename T>
void searchInMapByKey(std::map<Key,T> Map, Key keyValue)
模板
void searchInMapByKey(标准::映射映射,键值)
您告诉编译器,searchInMapByKey
函数有两个参数:一个是map
,另一个是T
对于呼叫,您将传递map
和int
从第一个参数推断出Key=int
和T=string
从第二个参数推断出T=int
因此它告诉您它有冲突。您告诉编译器函数searchInMapByKey
有两个参数:一个map
,一个T
对于呼叫,您将传递map
和int
从第一个参数推断出Key=int
和T=string
从第二个参数推断出T=int
因此,它告诉您它存在冲突。问题在于映射类型和键类型之间不匹配。
但我不会通过更正参数std::map
参数的顺序来修复它,而是通过将定义更改为更通用的方式
template <typename MapType, typename KeyType>
void searchInMapByKey(const MapType & Map, KeyType key) {
if(Map.empty()) {
std::cout << "Map is empty, nothing to search for..." << "\n";
return;
}
for(const auto & element : Map) {
if(element.first==keyValue) {
std::cout << keyValue << "matches a key value " << " in the map" << "\n";
}
}
}
模板
void searchInMapByKey(常量映射类型&映射,键类型键){
if(Map.empty()){
std::cout问题在于映射类型和键类型之间不匹配。
但我不会通过更正参数std::map
参数的顺序来修复它,而是通过将定义更改为更通用的方式
template <typename MapType, typename KeyType>
void searchInMapByKey(const MapType & Map, KeyType key) {
if(Map.empty()) {
std::cout << "Map is empty, nothing to search for..." << "\n";
return;
}
for(const auto & element : Map) {
if(element.first==keyValue) {
std::cout << keyValue << "matches a key value " << " in the map" << "\n";
}
}
}
模板
void searchInMapByKey(常量映射类型&映射,键类型键){
if(Map.empty()){
std::cout什么阻止了你使用std::map:find()
在你的地图内搜索?第二个参数应该是Key
,但是T
。那么为什么你不能用std::set
代替std::map
?什么阻止了你使用std::map:find()
在地图内部搜索?第二个参数应该是Key
,但是T
。那么为什么不能使用std::set
代替std::map
?正如@0x499602D2所建议的,我怀疑参数keyvalue
应该是Key
类型。正如@0x499602D2所建议的,我怀疑参数keyvalue
应该是Key
类型。非常感谢!这正是我想要的。您还为我展示了编写其余代码的更好方法!非常感谢!这正是我想要的。您也为我展示了编写其余代码的更好方法!