C ++中的“<! - ?=”是什么意思 - >

时间:2013-12-12 19:10:47

标签: c++

我在topcoder中的SnapDragon解决方案中多次观察到这一行 ret http://community.topcoder.com/stat?c=problem_solution&rm=166781&rd=5865&pm=3115&cr=272072。上面一行从底部出现在第6行。 这是代码

   vector<string> tokenize(string s, string ch) { 
  vector<string> ret; 
  for( int p = 0, p2; p < s.size(); p = p2+1 ) { 
    p2 = s.find_first_of(ch, p); 
    if( p2 == -1 ) p2 = s.size(); 
    if( p2-p > 0 ) ret.push_back( s.substr(p, p2-p) ); 
  } 
  return ret; 
} 

vector<int> tokint(string s, string ch) { 
  vector<int> ret; 
  vector<string> p = tokenize(s, ch); 
  for( int i = 0; i < p.size(); i++ ) 
    ret.push_back( atoi(p[i].c_str()) ); 
  return ret; 
} 

vector<vector<int> > tokmat(vector<string> s, string ch) { 
  vector<vector<int> > ret; 
  for( int i = 0; i < s.size(); i++ ) 
    ret.push_back( tokint(s[i], ch) ); 
  return ret; 
} 

int pref[15][30]; 

class OrderFood { 
public: 
int selectEntrees(vector <int> a, vector <string> b) { 
  int i, j, k, x, y, z, n; 

  VVI t = tokmat(b, " "); 
  for( i = 0; i < t.size(); i++ ) 
  for( j = 0; j < t[i].size(); j++ ) 
    pref[i][t[i][j]] = 1; 
  n = a.size()/2; 
  map<VI, int> m; 
  for( i = 0; i < (1<<n); i++ ) { 
    VI v(t.size()); 
    for( j = 0; j < n; j++ ) if( i&(1<<j) ) 
    for( k = 0; k < t.size(); k++ ) 
      v[k] += pref[k][j]; 
    for( j = 0; j < t.size(); j++ ) if( v[j] > 2 ) break; 
    if( j < t.size() ) continue; 
    x = 0; 
    for( j = 0; j < n; j++ ) if( i&(1<<j) ) 
      x += a[j]; 
    if( m.count(v) ) 
      m[v] <?= x; 
    else 
      m[v] = x; 
  } 
  int n2 = a.size()-n; 
  int ret = 1000000000; 
  for( i = 0; i < (1<<n2); i++ ) { 
    VI v(t.size(), 2); 
    for( j = 0; j < n2; j++ ) if( i&(1<<j) ) 
    for( k = 0; k < t.size(); k++ ) 
      v[k] -= pref[k][j+n]; 
    for( j = 0; j < t.size(); j++ ) if( v[j] < 0 ) break; 
    if( j < t.size() ) continue; 
    x = 0; 
    for( j = 0; j < n2; j++ ) if( i&(1<<j) ) 
      x += a[j+n]; 
    if( !m.count(v) ) continue; 
    ret <?= x + m[v]; 
  } 
  if( ret == 1000000000 ) return -1; 
  return ret; 
} 
};

2 个答案:

答案 0 :(得分:11)

<?=运算符是最小运算符,>?=是最大运算符。这两者都是非标准的GCC扩展。 a<?=ba=min(a,b)。使用a=min(a,b)代替此。它更具可读性,并且跨平台工作更好

答案 1 :(得分:0)

operator<?=GCC extension。在您的示例中,它将ret设置为retx + m[v]的最小值。

这不是标准运算符,因此不能移植到不同的编译器。