gpt4 book ai didi

c++ - 有关 C++ STL 的问题?

转载 作者:行者123 更新时间:2023-11-28 00:31:31 25 4
gpt4 key购买 nike

我是 C++ 的新手,正在阅读一些在线 C++ 代码并有这个问题:

我们什么时候重载 <运算符以及当我们重载 () 时运算符,当我们处理用户定义的对象、Set 和 Map 时?

用 Java 类比和简单的例子会有很大帮助。提前致谢。

最佳答案

何时重载 <运营商

假设你有:

struct foo
{
int a;
int b;
};

有很多容器,比如std::setstd::map在标准 C++ 库中,只有在有一种方法可以对对象进行排序时才有效。

如果你想创建一组foo对象,你必须让编译器知道可以调用什么函数来比较foo对象,以便可以在运行时对它们进行排序。您允许的一种方式 foo要排序的对象是通过提供 operator<功能。

struct foo
{
int a;
int b;
bool operator<(const foo& rhs) const;
{
// Add your logic to compare too objects and return true
// if the LHS is deemed to be less than the RHS.
}
};

完成后,您可以构建一组 foo对象:

std::set<foo> setOfFoo;

何时重载 ()运营商

标准 C++ 库中的许多函数都使用 fuctor。仿函数是函数指针或具有 () 的结构/类的实例。运营商。

例如,标准库函数的一个版本std::sort定义为:

template <class RandomAccessIterator, class Compare>
void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp);
    comp        Binary function that accepts two elements in the range as arguments,        and returns a value convertible to bool. The value returned indicates        whether the element passed as first argument is considered to go before        the second in the specific strict weak ordering it defines.        The function shall not modify any of its arguments.        This can either be a function pointer or a function object.

If you want to sort a list of foo objects in a std::vector, you will have to do something like:

struct FooCompare
{
bool operator()(foo const& lhs, foo const& rhs)
{
return (lhs < rhs);
}
}

std::vector<foo> fooList;
// Add items to fooList

// Sort fooList
std::sort(fooList.begin(), fooList.end(), FooCompare());

请注意,这只是为了说明 ()运算符函数。在现实生活中,你应该能够使用 std::less为此类。

// Sort fooList
std::sort(fooList.begin(), fooList.end(), std::less<foo>());

关于c++ - 有关 C++ STL 的问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22728027/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com