Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/164.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;在映射中搜索值的类和方法_C++ - Fatal编程技术网

C++ C++;在映射中搜索值的类和方法

C++ C++;在映射中搜索值的类和方法,c++,C++,为了更好地提交我的问题,我已经写了一个最小的类 我有三个文件: 1) test.hpp 当我编译并运行它时,会出现以下错误: 未定义的引脚AAAA 如果我删除main.cpp并将main函数放在test.cpp文件中,我不会得到任何错误,GetPin会返回正确的值 知道我做错了什么吗 谢谢不能保证“AAAA”与您程序中其他地方使用的“AAAA”地址相同。因此,查找“AAAA”并不一定有效,因为映射将比较指针值 使用std::map而不是std::map,您的问题应该得到解决 不能保证“AAAA”

为了更好地提交我的问题,我已经写了一个最小的类

我有三个文件:

1) test.hpp

当我编译并运行它时,会出现以下错误:

未定义的引脚AAAA

如果我删除main.cpp并将main函数放在test.cpp文件中,我不会得到任何错误,GetPin会返回正确的值

知道我做错了什么吗


谢谢

不能保证“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;
}