表达式:未排序的序列

时间:2014-04-27 03:18:00

标签: c++ crash std intersection

我试图找到2个字符串之间的交叉点。我使用以下代码:

std::string a = "asd", b = "afd";

std::string intersect;
std::set_intersection(a.begin(), a.end(), b.begin(), b.end(), std::back_inserter(intersect));

它成功编译,但在运行程序后,瞬间崩溃并出现以下错误:

enter image description here

有什么建议导致这个问题?

1 个答案:

答案 0 :(得分:3)

您应先将ab排序,然后再将其传递给std::set_intersection()

  

template< class InputIt1, class InputIt2, class OutputIt > OutputIt set_intersection( InputIt1 first1, InputIt1 last1, InputIt2 first2, InputIt2 last2, OutputIt d_first ); (1) template< class InputIt1, class InputIt2, class OutputIt, class Compare > OutputIt set_intersection( InputIt1 first1, InputIt1 last1, InputIt2 first2, InputIt2 last2, OutputIt d_first, Compare comp ); (2)

     

构造一个从d_first开始的排序范围,该排序范围包含在排序范围[first1, last1)[first2, last2)中找到的元素。 第一个版本希望两个输入范围都使用operator<排序,第二个版本希望使用给定的比较函数comp 对它们进行排序。

所以,添加

std::sort(a.begin(), a.end());
std::sort(b.begin(), b.end());