我有一个问题,当在地图中用作键时,如何处理指向自定义对象的指针.更具体地说,如果我定义
std::map< CustomClass*, int > foo;
Run Code Online (Sandbox Code Playgroud)
默认的C++实现是否可以处理这些指针?或者我是否需要定义自定义比较器函数来处理它?通常,使用指向对象的指针作为键是一种好习惯吗?
我可以检查给定指针是否指向由其边界指定的数组中的对象?
template <typename T>
bool points_within_array(T* p, T* begin, T* end)
{
return begin <= p && p < end;
}
Run Code Online (Sandbox Code Playgroud)
或者,如果p
指向数组范围之外的点,指针比较是否会调用未定义的行为?在那种情况下,我该如何解决这个问题?它是否适用于void指针?还是不可能解决?
以下代码段中的断言是否始终有效?
std::less<Object *> lessPtr;
Object * o = new Object();
assert(lessPtr (o, nullptr) == false);
Run Code Online (Sandbox Code Playgroud) 我想通过他们的地址比较两个对象.我试过运算符重载,它似乎不适用于指针,但适用于对象本身.以下是相关代码:
class C {
public:
int x;
};
.
.
.
bool operator <( C *ptr_c1, C *ptr_c2 )
{
return ( (*ptr_c1).x < (*ptr_c2).x );
}
Run Code Online (Sandbox Code Playgroud) 函数指针支持的所有操作与原始指针有什么不同?是>,<,<=,> =原始指针支持的运算符如果有,有什么用?
我有两个选项来创建一个std地图.我可以使用两种类型的地图.
1. std::map<A, std::string>
2. std::map<A*, std::string>
Run Code Online (Sandbox Code Playgroud)
哪个A
是类对象
稍后在代码中我将不得不执行查找操作.
1. std::map<A, std::string> myMap1;
if(myMap1.find(A_obj) != myMap1.end())
{
}
2. std::map<A*, std::string> myMap2;
if(myMap2.find(A_obj_ptr) != myMap2.end())
{
}
Run Code Online (Sandbox Code Playgroud)
我想知道建议创建哪一个.在这两个中的哪一个中,我不必重载类中的任何运算符以A
使查找操作起作用.当任何运算符没有过载时,哪些在插入操作上会出现问题.
如果有帮助,这是A类
class A
{
private:
std::vector<std::string> m_member;
public:
A(std::vector<std::string> input);
};
Run Code Online (Sandbox Code Playgroud)