using std::set;
时间: 2023-12-06 12:37:13 浏览: 32
`using std::set;`是一个C++中的命名空间声明,它的作用是将`std`命名空间中的`set`类引入到当前的命名空间中,以便在代码中可以直接使用`set`类而不需要使用完整的命名空间限定符。例如,如果没有使用`using std::set;`声明,那么在代码中使用`set`类需要写成`std::set`。
下面是一个使用`using std::set;`声明的例子:
```c++
#include <iostream>
#include <set>
using std::set;
int main() {
set<int> myset;
myset.insert(3);
myset.insert(1);
myset.insert(7);
for (auto it = myset.begin(); it != myset.end(); ++it) {
std::cout << *it << " ";
}
return 0;
}
```
这个例子中,我们使用了`using std::set;`声明,因此可以直接使用`set`类而不需要写成`std::set`。在`main`函数中,我们创建了一个`set`对象`myset`,并向其中插入了三个元素。最后,我们使用迭代器遍历`myset`并输出其中的元素。
相关问题
std::set 比较器的使用方法
std::set 是 C++ STL 中的一个容器,用于存储一组不重复的元素,且元素按照一定的顺序排列。在默认情况下,std::set 会按照元素的大小进行升序排列。如果我们需要按照自己的规则进行排序,就需要使用比较器。
比较器是一个函数对象,它定义了两个元素之间的比较规则。在 std::set 中,比较器可以通过模板参数指定。比较器有两种形式:
1. 函数指针形式:
```c++
bool (*comp)(const T& a, const T& b);
```
2. 函数对象形式:
```c++
class Compare {
public:
bool operator()(const T& a, const T& b);
};
```
其中,T 是元素类型。
下面是使用比较器对 std::set 进行排序的示例:
```c++
#include <iostream>
#include <set>
using namespace std;
class Person {
public:
string name;
int age;
Person(string name, int age) : name(name), age(age) {}
bool operator<(const Person& rhs) const {
return age < rhs.age;
}
};
class Compare {
public:
bool operator()(const Person& a, const Person& b) const {
return a.name < b.name;
}
};
int main() {
std::set<Person, Compare> persons;
persons.insert(Person("Tom", 20));
persons.insert(Person("Jerry", 18));
persons.insert(Person("Mike", 25));
for (const auto& person : persons) {
cout << person.name << " " << person.age << endl;
}
return 0;
}
```
在这个示例中,我们定义了一个 Person 类,其中定义了一个小于运算符 operator<,用于比较两个 Person 对象的年龄大小。我们还定义了一个 Compare 类,其中定义了一个小于运算符 operator(),用于比较两个 Person 对象的名字。在 main 函数中,我们使用 std::set<Person, Compare> 定义了一个 persons 容器,其中指定了 Compare 作为比较器。在插入元素时,std::set 会根据 Compare 定义的规则进行排序。结果输出如下:
```
Jerry 18
Mike 25
Tom 20
```
可以看到,std::set 按照 Compare 定义的规则对元素进行了排序。
using SetTypeIterator = std::set<order::Order*, Compare>::iterator; /home/xuguanglong/data/ai-simulating-exchange/SHSE/server/helpers/helpers.h:110: error: need ‘typename’ before ‘std::set<exchange::order::orderstr*, Compare>::iterator’ because ‘std::set<exchange::order::orderstr*, Compare>’ is a dependent scope 110 | using SetTypeIterator = std::set<order::Order*, Compare>::iterator; | ^~~ | typename
这个错误是因为使用了一个依赖作用域的类型名字,需要在类型名前加上 `typename`。正确的代码应该是这样的:
```
using SetTypeIterator = typename std::set<order::Order*, Compare>::iterator;
```
在一个依赖作用域中使用一个类型名时,编译器会认为它是一个变量或静态成员,因此需要使用 `typename` 来明确指出这个名字是一个类型。