【问题标题】:map and set insert function won't resolve地图和设置插入功能将无法解决
【发布时间】:2016-07-07 02:40:02
【问题描述】:

我的任务是使用 std set、map 或 multimap 的某种组合来实现具有先决条件的课程集合。任务有点开放,我很难开始。在 courseCollections.h 下我有以下内容

//A collection of courses with no duplicates.
typedef std::set<Course, less<Course> > CourseSet;
//A map from a course to zero or more other courses.
typedef std::multimap<Course, Course, less<Course>> CourseMap;

在 CourseCatalog 的构造函数中,我声明以下内容

CourseSet coursesOffered;
CourseMap enables;

我正在尝试实现将课程添加到集合和地图的功能,但是当我尝试使用 enable.insert 时出现编译错误。为什么这不符合我的预期?

void addCourses (
        const Course& course1,
        const Course& prereqOfCourse1)
{
    enables.insert(course1, prereqOfCourse1); //error Method 'insert' could not be resolved
}

【问题讨论】:

    标签: c++ dictionary set


    【解决方案1】:

    std::map::insert() 采用一个参数std::pair,而不是两个单独的参数。

    enables.insert(std::make_pair(course1, prereqOfCourse1));
    

    【讨论】:

      【解决方案2】:

      这是因为enables.insert() 采用CourseSet::value_type 类型的单个参数,在本例中为std::pair&lt;const Course, Course&gt;。你给它两个参数。解决这个问题一般有两种方法:

      enables.insert(std::make_pair(course1, prereqOfCourse));
      

      这里你给insert()它想要的类型。不过,第二种解决方案可能更符合您的要求:

      enables.emplace(course1, prereqOfCourse);
      

      enables.emplaceCourseSet::value_type 的构造函数的参数作为其参数。这不那么冗长,而且可能更容易阅读和理解。

      注意:std::multimap&lt;T&gt;::emplace 需要 C++ 11 支持(至少)。

      【讨论】:

      • 谢谢。似乎存在更深层次的问题,因为编译器根本无法解决使能问题。我正在对讲师的期望进行非常模糊的说明,因此我直接与他联系,但感谢您确认我的期望并没有实现。
      猜你喜欢
      • 2014-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-13
      相关资源
      最近更新 更多