【问题标题】:Using an object variable for multimap equal_range()为多图使用对象变量 equal_range()
【发布时间】:2012-11-25 18:27:30
【问题描述】:

我正在使用一个对象作为多图的键。该对象是我创建的自定义日期类。我只是想知道是否可以将在对象中找到的变量用于 equal_range()?

这是在我的自定义日期对象中检查月份变量。

就是这样(伪代码)。

int january = 1;
foundValues = myMultimap.equal_range(january);

for (it=foundValues.first; it!=foundValues.second; ++it)
{
  cout << " " << (*it).second;
  cout << endl;
}

这是否会遍历每个键对象并检查该对象中的变量是否等于“一月”,然后返回与键配对的值?

谢谢。

【问题讨论】:

  • 你为什么不首先使用月份作为键?
  • 如果您的日期包含年份,它将不起作用,因为“所有年份中的一月的所有日子”不是一个范围。
  • Xymistech- 原因是我需要搜索某年某月的所有值。这就是我使用日期类作为密钥的原因。我尝试使用包含格式为 did/mm/yyyy 的完整日期的字符串,但是当我进行有序旅行时,多地图仅按天排序。因此,当您查看输出时,日期是按顺序排列的,但月份和年份不是。

标签: c++ multimap


【解决方案1】:

关联容器的搜索成员仅对键起作用。它们的存在是因为它们利用了容器的内部结构,该结构保证在O(log(n)) 时间内(其中n 是容器中的元素数量)找到值(或它们不存在)。

如果您想查找与某个条件匹配的序列中的所有元素,您可能需要将std::copy_if() 与合适的谓词一起使用。

【讨论】:

  • 啊。谢谢你。我可以再次确认该功能吗? copy_if(mymulti.begin(), my multi.end(), compmonth());像这样?
  • 您可以将其称为std::copy_if(multimap.begin(), multimap.end(), std::back_inserter(target), compmonth())。此算法是 C++ 2011 中的新算法。如果您需要使用 C++ 2003,可以使用 std::remove_copy_if() 代替,但显然您需要否定谓词。
猜你喜欢
  • 2020-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-11
  • 2017-10-06
  • 1970-01-01
  • 1970-01-01
  • 2019-07-16
相关资源
最近更新 更多