C++ C++;在映射中搜索值的类和方法
为了更好地提交我的问题,我已经写了一个最小的类 我有三个文件: 1) test.hpp 当我编译并运行它时,会出现以下错误: 未定义的引脚AAAA 如果我删除main.cpp并将main函数放在test.cpp文件中,我不会得到任何错误,GetPin会返回正确的值 知道我做错了什么吗C++ C++;在映射中搜索值的类和方法,c++,C++,为了更好地提交我的问题,我已经写了一个最小的类 我有三个文件: 1) test.hpp 当我编译并运行它时,会出现以下错误: 未定义的引脚AAAA 如果我删除main.cpp并将main函数放在test.cpp文件中,我不会得到任何错误,GetPin会返回正确的值 知道我做错了什么吗 谢谢不能保证“AAAA”与您程序中其他地方使用的“AAAA”地址相同。因此,查找“AAAA”并不一定有效,因为映射将比较指针值 使用std::map而不是std::map,您的问题应该得到解决 不能保证“AAAA”
谢谢不能保证“AAAA”与您程序中其他地方使用的“AAAA”地址相同。因此,查找“AAAA”并不一定有效,因为映射将比较指针值
使用
std::map
而不是std::map
,您的问题应该得到解决 不能保证“AAAA”与您程序中其他地方使用的“AAAA”地址相同。因此,查找“AAAA”并不一定有效,因为映射将比较指针值
使用
std::map
而不是std::map
,您的问题应该得到解决 您的问题是您正在使用映射中的char*
指针作为键值。要在映射中查找条目,实现将使用比较操作(您的问题是在映射中使用char*
指针作为键值。要在映射中查找条目,实现将使用比较操作(您的解决方案非常简单:
#include <iostream>
#include <map>
#include <string>
int
main ()
{
std::map<std::string, std::string> pins { { "AAAA" , "BBBB" }, { "CCCC" , "DDDD" } };
auto lookup = pins.find("AAAA");
if (lookup != pins.end())
std::cout << "Pin AAAA found!" << std::endl;
else
std::cerr << "Pin AAAA not found!" << std::endl;
return 0;
}
#包括
#包括
#包括
int
主要()
{
映射管脚{{“AAAA”、“BBBB”}、{“CCCC”、“DDDD”};
自动查找=pins.find(“AAAA”);
if(lookup!=pins.end())
std::cout您的解决方案非常简单:
#include <iostream>
#include <map>
#include <string>
int
main ()
{
std::map<std::string, std::string> pins { { "AAAA" , "BBBB" }, { "CCCC" , "DDDD" } };
auto lookup = pins.find("AAAA");
if (lookup != pins.end())
std::cout << "Pin AAAA found!" << std::endl;
else
std::cerr << "Pin AAAA not found!" << std::endl;
return 0;
}
#包括
#包括
#包括
int
主要()
{
映射管脚{{“AAAA”、“BBBB”}、{“CCCC”、“DDDD”};
自动查找=pins.find(“AAAA”);
if(lookup!=pins.end())
std::cout为什么不把事情简单化,只使用一个包含std::string
的映射而不是char*
?你想使用std::map
而不是std::map
,除非你给它一个专门用于const char*
的比较运算符(例如用stdncmp()
实现)。为什么不让事情变得简单,只使用一个包含std::string
的映射而不是char*
?你想使用std::map
而不是std::map
,除非你给它一个专门用于const char*
的比较运算符(例如用stdncmp()
实现)。非常感谢您给出了双重解决方案!@Slava耸耸肩,我只是从中复制了sig。@ManuelGarcía如果您认为这完全回答了您的问题,您可能需要它。@πάνταῥεῖ 完成了!再次感谢!非常感谢您提供了双重解决方案!@Slava耸耸肩,我只是从中复制了sig。@ManuelGarcía如果您认为这完全回答了您的问题,您可能需要它。@πάνταῥεῖ 完成!再次感谢!不要将代码段内容用于不可运行的代码。它不仅看起来难看,而且对不受支持的语言也有误导作用。不要将代码段内容用于不可运行的代码。不仅难看,对不受支持的语言也有误导作用。
#include "test.hpp"
int main () {
test myExample;
const char *a = myExample.getPin ("AAAA");
exit (EXIT_SUCCESS);
}
std::map<std::string, std::string>
std::map<char*, char*, MyComparer>
struct MyComparer {
bool operator()( const char*& lhs, const char*& rhs ) const {
return strcmp(lhs,rhs) < 0;
}
};
#include <iostream>
#include <map>
#include <string>
int
main ()
{
std::map<std::string, std::string> pins { { "AAAA" , "BBBB" }, { "CCCC" , "DDDD" } };
auto lookup = pins.find("AAAA");
if (lookup != pins.end())
std::cout << "Pin AAAA found!" << std::endl;
else
std::cerr << "Pin AAAA not found!" << std::endl;
return 0;
}