首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在C++中按字母顺序在列表中插入字符串

在C++中按字母顺序在列表中插入字符串
EN

Stack Overflow用户
提问于 2018-02-22 13:24:37
回答 4查看 1.6K关注 0票数 3

我尝试将字符串值的示例向量按字母顺序插入到预先排序的列表中(并且不使用/编写排序函数)。我正确地获得了部分代码,其中一个字符串将被插入到列表中。然而,由于我不太熟悉迭代器,我的if语句是不完整的,字符串随后会被连续推送到满足条件的所有值。

代码语言:javascript
运行
复制
#include <iostream>
#include <list>
#include <vector>
#include <string>

std::list<std::string> update(std::list<std::string>& data, std::vector<std::string> add){
   std::vector<std::string>::iterator add_itr;
   std::list<std::string>::iterator data_itr;

   for (data_itr = data.begin(); data_itr != data.end(); data_itr++){
    for (add_itr = add.begin(); add_itr != add.end(); add_itr++){
       //this condition is incomplete 
       if (*add_itr < *data_itr)
          data.insert(data_itr, *add_itr);

      }
   }

   return data;
}

void print(const std::string &label, const std::list<std::string> &data) {
  std::cout << label;
  for (std::list<std::string>::const_iterator itr = data.begin();
       itr != data.end(); itr++) {
    std::cout << " " << *itr;
  }
  std::cout << std::endl;
}


int main() {

  std::list<std::string> data;
  data.push_back("antelope");
  data.push_back("catfish");
  data.push_back("giraffe");
  data.push_back("llama");
  data.push_back("jellyfish");
  data.push_back("whale_shark");
  data.push_back("zebra");

  std::vector<std::string> add;
  add.push_back("tiger");
  add.push_back("llama");
  add.push_back("elephant");

  print ("before:",data);
  update(data,add);
  print ("after: ",data);

}

我认为if语句的另一个条件应该是&& *add_itr > *(前一个位置中的数据字符串),但我不确定如何正确地迭代列表迭代器并编写以下代码。

任何帮助都将不胜感激!

EN

Stack Overflow用户

发布于 2018-02-22 15:37:17

在C++中,迭代器面向泛型编程。这意味着您可以只编写一次集合处理算法,然后将其用于任意集合集,只要它们支持迭代器概念。

下面是如何以通用的方式实现所需的内容。

代码语言:javascript
运行
复制
template<typename T, typename K>
void update(T& sortedValues, const K& valuesToAdd) {
    for (auto value : valuesToAdd) {
        auto position = std::lower_bound(sortedValues.begin(), sortedValues.end(), value);
        sortedValues.insert(position, value);
    }
}

当然,如果有必要,您可以始终更具体地说明集合类型。

注意:在预先排序的列表中,"jellyfish“应该在"llama”之前。

票数 0
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48920200

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档