为什么 set_symmetry_difference 无法与比较器一起使用?

2024-05-15

// Example program
#include <iostream>
#include <string>
#include <set>
#include <map>
#include <algorithm>


struct cmp {
   bool operator()(std::string i, const std::pair<std::string,std::string>& p) const
   {
     return i < p.first;
   }

   bool operator()(const std::pair<std::string, std::string>& p, std::string i) const
   {
     return p.first < i;
   }
};

int main(){

     std::set<std::string> s1 {"--name", "--id"};      //Conditionally defined mandatory parameters
     std::map<std::string, std::string> s2 { {"--name","Admin"}, {"--group","Group1"}};      //options given by user

     std::set<std::string> result;

     std::set_difference(s1.begin(), s1.end(), s2.begin(), s2.end(),
     std::inserter(result, result.end()), cmp());

     std::cout << *result.begin();
}

我希望输出是这样的,如果用户错过了任何一个强制参数,它应该抛出错误,同时如果用户提到了强制参数之外的任何额外参数,则再次预期会出现错误。

set_symmetry_difference 也无法使用它。


它需要能够比较您提供的任何元素组合,包括字符串与字符串以及对与对。

struct cmp {
    bool operator()(const std::string &i1, const std::string &i2)
    {
        return i1 < i2;
    }

    bool operator()(const std::pair<std::string, std::string> &p1, const std::pair<std::string, std::string> &p2)
    {
        return p1.first < p2.first;
    }

    bool operator()(const std::string &i, const std::pair<std::string, std::string> &p)
    {
        return i < p.first;
    }

    bool operator()(const std::pair<std::string, std::string> &p, const std::string &i)
    {
        return p.first < i;
    }
};

output:

--id

从文档中http://en.cppreference.com/w/cpp/algorithm/set_difference http://en.cppreference.com/w/cpp/algorithm/set_difference

比较函数的签名应等效于以下内容:

bool cmp(const Type1 &a, const Type2 &b);

签名不需要有 const &,但函数对象不能修改传递给它的对象。 类型 Type1 和 Type2 必须使得 InputIt1 和 InputIt2 类型的对象可以被取消引用,然后隐式转换为 Type1 和 Type2。​

我只用一个比较函数尝试过,但它不起作用。如果我注释掉任何一个函数,它就不起作用。最后一行似乎意味着如果我测试的编译器/std 实现是正确的,则两个迭代器都必须隐式转换为两种类型。但我宁愿只提供所有四种组合。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 set_symmetry_difference 无法与比较器一起使用? 的相关文章

  • 如何在 Visual Studio 2010 中增强 XAML 设计器?

    当我使用 XAML 设计器时 进入设计器和退出设计器是如此困难和缓慢 当我这样做时 Visual Studio 卡了一段时间 有什么方法可以增强 XAML 设计器和编辑器吗 Ant 保存 XAML 文件时非常慢 这通常意味着您可能有复杂的
  • 如何使用MemoryCache代替Timer来触发一个方法?

    以下方法通过等待已运行操作的结果来处理并发请求 对数据的请求可能会使用相同 不同的凭据同时出现 对于每组唯一的凭据 最多可以有一个GetCurrentInternal呼叫正在进行中 当准备就绪时 该呼叫的结果将返回给所有排队的服务员 pri
  • Unix网络编程澄清

    我正在翻阅这本经典书籍Unix网络编程 https rads stackoverflow com amzn click com 0139498761 当我偶然发现这个程序时 第 6 8 节 第 179 180 页 include unp h
  • 向 Nhibernate 发出 SQL 查询

    如何将此 SQL 查询发送给 Nhibernate SELECT Customer name FROM Company INNER JOIN Customer ON Company CompanyId Customer CompanyId
  • 如何在 C# 中从 UNIX 纪元时间转换并考虑夏令时?

    我有一个从 unix 纪元时间转换为 NET DateTime 值的函数 public static DateTime FromUnixEpochTime double unixTime DateTime d new DateTime 19
  • 推导指南中的引用和值之间的差异

    考虑类型A template
  • 如何将 #ifdef DEBUG 添加到 Xcode?

    我的项目中有一些代码永远不应该在发布版本中使用 但在测试时很有用 我想做这样的事情 ifdef DEBUG Run my debugging only code endif 在 Xcode 4 中哪里添加 DEBUG 设置 我尝试将其放入
  • 在新的浏览器进程中打开 URL

    我需要在新的浏览器进程中打开 URL 当浏览器进程退出时我需要收到通知 我当前使用的代码如下 Process browser new Process browser EnableRaisingEvents true browser Star
  • C++中的类查找结构体数组

    我正在尝试创建一个结构数组 它将输入字符串链接到类 如下所示 struct string command CommandPath cPath cPathLookup set an alarm AlarmCommandPath send an
  • 在 C# 中循环遍历文件文件夹的最简单方法是什么?

    我尝试编写一个程序 使用包含相关文件路径的配置文件来导航本地文件系统 我的问题是 在 C 中执行文件 I O 这将是从桌面应用程序到服务器并返回 和文件系统导航时使用的最佳实践是什么 我知道如何谷歌 并且找到了几种解决方案 但我想知道各种功
  • 将 Excel 导入到 Datagridview

    我使用此代码打开 Excel 文件并将其保存在 DataGridView 中 string name Items string constr Provider Microsoft Jet OLEDB 4 0 Data Source Dial
  • 如何将整数转换为 void 指针?

    在 C 中使用线程时 我面临警告 警告 从不同大小的整数转换为指针 代码如下 include
  • C++:.bmp 到文件中的字节数组

    是的 我已经解决了与此相关的其他问题 但我发现它们没有太大帮助 他们提供了一些帮助 但我仍然有点困惑 所以这是我需要做的 我们有一个 132x65 的屏幕 我有一个 132x65 的 bmp 我想遍历 bmp 并将其分成小的 1x8 列以获
  • Visual Studio 中的测试单独成功,但一组失败

    当我在 Visual Studio 中单独运行测试时 它们都顺利通过 然而 当我同时运行所有这些时 有些通过 有些失败 我尝试在每个测试方法之间暂停 1 秒 但没有成功 有任何想法吗 在此先感谢您的帮助 你们可能有一些共享数据 检查正在使用
  • .NET中的LinkedList是循环链表吗?

    我需要一个循环链表 所以我想知道是否LinkedList是循环链表吗 每当您想要移动列表中的 下一个 块时 以循环方式使用它的快速解决方案 current current Next current List First 电流在哪里Linke
  • C++ 密码屏蔽

    我正在编写一个代码来接收密码输入 下面是我的代码 程序运行良好 但问题是除了数字和字母字符之外的其他键也被读取 例如删除 插入等 我知道如何避免它吗 特q string pw char c while c 13 Loop until Ent
  • 为什么在setsid()之前fork()

    Why fork before setsid 守护进程 基本上 如果我想将一个进程与其控制终端分离并使其成为进程组领导者 我使用setsid 之前没有分叉就这样做是行不通的 Why 首先 setsid 将使您的进程成为进程组的领导者 但它也
  • 线程和 fork()。我该如何处理呢? [复制]

    这个问题在这里已经有答案了 可能的重复 多线程程序中的fork https stackoverflow com questions 1235516 fork in multi threaded program 如果我有一个使用 fork 的
  • 当另一个线程可能设置共享布尔标志(最多一次)时,是否可以读取共享布尔标志而不锁定它?

    我希望我的线程能够更优雅地关闭 因此我尝试实现一个简单的信号机制 我不认为我想要一个完全事件驱动的线程 所以我有一个工作人员有一种方法可以使用关键部分优雅地停止它Monitor 相当于C lock我相信 绘图线程 h class Drawi
  • 防止在工厂方法之外实例化对象

    假设我有一个带有工厂方法的类 class A public static A newA Some code logging return new A 是否可以使用 a 来阻止此类对象的实例化new 那么工厂方法是创建对象实例的唯一方法吗 当

随机推荐